请教各位大神。当调用函数的 call
方法时,内部的 this
究竟是如何指向的?
当 call
传入为对象时这个比较好理解。this
直接指向这个对象。但是当传入的是一个函数呢?比如下面这个例子
function class1 () {
this.message = "yeah";
}
function class2 () {
this.sayMessage = function () {
alert(this.message);
}
}
class2.call(class1);
alert(class1.sayMessage);
class1.sayMessage(); //undefined
class
可以获得 sayMessage
这个方法。但是执行这个方法返回的结果是 undefined
。我个人的理解是因为没有定义 class1.message
,所以返回未定义。但是,当代码改为如下时,我蒙了。
var message = "hi";
function class1 () {
this.message = "yeah";
}
function class2 () {
this.message = "hello";
this.sayMessage = function () {
alert(this.message);
}
}
class2.call(class1);
alert(class1.sayMessage);
class1.sayMessage(); // hello
class1.message = "msg";
class1.sayMessage(); //msg
当未对 class1.message
赋值时,调用 class1.sayMessage()
为何返回的是 class2
中的 message
属性??整个过程中 this
究竟是如何指向的?
自问自答吧。
刚刚仔细想了一下,终于明白了。
当调用 class2.call(class1)
时,class1
获得 class2
中的 message
属性。所以此时 class1.message = "hello"
。调用 sayMessage
方法则返回 class1
中的 message
值。