我正在关注“you-dont-know-js”一书。我对以下代码有疑问:
var something = {
cool: function() {
this.greeting = "hello";
this.count = this.count?this.count+1:1;
}
};
something.cool();
console.log(something.greeting);
console.log(something.count);
var another = {
cool: function() {
//something.cool.call(this);
something.cool()
}
}
another.cool();
console.log(another.greeting);
console.log(another.count);
如果another.cool具有以下代码
something.cool()
而不是
something.cool.call(this);
我得到以下console.log
的输出未定义console.log(another.greeting);
console.log(another.count);
默认情况下,不应该对此引用为“something”,输出为:
hello
2
答案 0 :(得分:0)
当您致电something.cool();
时,无论您是从全球范围还是another.cool
内拨打该号码,this
定义中的关键字something.cool
仍然引用{ {1}}对象。
换句话说,(这是您实际问题的答案)调用something
时不会更改something.cool();
方法中this
关键字的值定义
但是,当您从something.cool
的定义中调用something.cool.call(this)
时,您正在执行another.cool
,就像它是something.cool
对象的一部分一样,因为您传递给调用的another
是对this
对象的引用。
传递给another
的参数用作被调用方法的 context 。在something.cool.call(this)
方法定义中,another.cool
关键字引用this
对象。