可能重复:
JavaScript losing “this” object reference with private/public properties
为什么第二个警报显示窗口对象,而不显示O(或甚至P)对象?
window.name = "test window";
O = {
name : 'object O',
f : function() {
alert(this.name); // 2nd alert
}
}
P = {
name : 'object P',
f : function() {
alert(this); // 1st alert
var of = O.f;
of();
}
}
P.f();
换句话说,如何直接调用对象的函数在窗口的上下文中?我想这是关闭的问题,但我不知道转换发生在哪里。
谢谢。
答案 0 :(得分:3)
执行此操作时:
var of = O.f;
of();
您的this
在这里遭到破坏,因为this
并未真正锁定在JavaScript中。它具有很强的可塑性,在您的情况下,您可以做一些事情来使其更好地工作。
你可以做任何这些事情来正确地绑定它:
var of = O.f.bind(this);
of();
或
var of = O.f
of.call(this);
或只是
O.f.call(this);
答案 1 :(得分:1)
如果您想保持O
的范围,请尝试此
window.name = "test window";
O = {
name : 'object O',
f : function() {
alert(this.name); // 2nd alert
}
}
P = {
name : 'object P',
f : function() {
alert(this.name); // 1st alert
var of = O.f;
of(); // loses scope since this.of does not exist it calls using anonymous window scope
of.call(O); // passes O as scope
of.call(P); // passes P as scope
this.of = O.f;
this.of(); // maintains current P scope
}
}
P.f();
这是一个小提琴:http://jsfiddle.net/QVSDA/