请引用- https://jsfiddle.net/ta2u2z9a/
var o = {
x: 6
};
function a() {
this.x = 3;
this.y = function() {
alert(this.x)
}
}
var a1 = new a();
a1.y.call(); //shouldn't it alert 3?
a1.y.call(o) //is alerting 6, correct!
为什么第一个警报,警报未定义?它不应该提醒 3 吗?
最佳答案
.call()
的第一个参数需要是方法的“所有者对象”:
a1.y.call(a1);
这是怎么回事?
当您“自然地”调用方法时(例如 a1.y()
),this
的值会自动设置为对象(例如 a1
)。
当函数 not 用作方法时(例如 var x = a1.y; x();
),this
的值> 是全局/窗口对象,或者是 null
(取决于您是否处于“严格模式”)。
.call()
方法(它是函数的方法)是一种显式设置this
值的方法,而不是让它自动分配。使用 .call()
时,您必须自己提供 this
值作为第一个参数。
关于Javascript - 为什么调用方法无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31295056/