我有一个像这样的对象文字:
var test = {
one: function() {
},
two: function() {
this.one(); // call 1
test.one(); // call 2
}
};
函数中的调用two
(使用对象文字名称与 using this
)有什么区别?
我有一个像这样的对象文字:
var test = {
one: function() {
},
two: function() {
this.one(); // call 1
test.one(); // call 2
}
};
函数中的调用two
(使用对象文字名称与 using this
)有什么区别?
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
不同之处在于第二次调用将始终绑定到测试对象,而这可能会反弹到其他对象:
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