我的印象是“this”关键字代表范围内的当前所有者.显然,这是错误的.让我来看看代码:
alert(this); // alerts as [object Window] -- Okay function p1() { alert(this); } var p2 = function() { alert(this); } p1(); // alerts as undefined -- ??? p2(); // alerts as undefined -- ?? window.p1(); // alerts as [object Window] -- Okay window.p2(); // alerts as [object Window] -- Okay
上面的代码首先警告[对象窗口],正如我所料,但接下来的两次调用p1()和p2()警告“this”为“undefined”.最后两次调用p1()和p2()将“this”警告为[object window].
是不是p1()和p2()存在于全局(即窗口)范围内?我认为调用window.p1()与调用p1()是同义词,就像调用alert()与window.alert()同义一样.
对于我的(C#)思维方式,p1()和p2()属于全局范围.这些函数是全局窗口对象的成员,因此当它们引用“this”时,它们应该引用[object Window].显然,我在这里非常错.