我有一个像这样的对象文字:
var test = {
one: function() {
},
two: function() {
this.one(); // call 1
test.one(); // call 2
}
};
two
函数中的调用之间有什么区别(使用对象文字名称与使用this
)?
答案 0 :(得分:5)
test
始终在two
函数的闭包内绑定到变量test
,而this
取决于函数的调用方式。如果使用常规对象成员访问语法调用该函数,this
将成为拥有该函数的对象:
test.two(); // inside, "this" refers to the object "test"
您可以使用this
:
Function.prototype.call
的值
test.two.call(bar); // inside, "this" refers to the object "bar"
但是test
的值在two
函数内部保持不变,无论函数如何被调用。
答案 1 :(得分:1)
不同之处在于第二次调用将始终绑定到测试对象,而这可能会反弹到其他对象:
var other = {
one: function () {
alert('other.one');
}
};
// call test.two as a method of object other
test.two.call(other); // calls other.one and test.one