看看这个:
var a = { b: function() { console.log(this); } } // Example 1 a.b(); // a // Example 2 eval('a.b()'); // a // Example 3 setTimeout('a.b()',100); // a // Example 4 setTimeout(a.b,100); // Window // Example 5 var c = a.b; c(); // Window
假设预期结果是我的预期……
例1
当调用对象的属性b()时,这将成为属性的对象,这里是父对象.它产生预期的结果.
例2
eval()意味着采用它的调用位置的执行上下文,在本例中是window.它还产生预期的结果.
例3
将字符串传递给setTimeout()时,我想它会遇到与eval()非常相似的东西.它也产生预期的结果.
例4
在这个例子中,这变成了Window.这就是我感兴趣的.
例5
这里变成了Window,因为c的父对象是Window.
>当仅传递对函数的引用(例如a.b)时,使用()调用时它是否始终为Window?
>唯一的方法是将它作为一个字符串传递给setTimeout()/ setInterval()吗?
解决方法
When passing only a reference to a function (e.g. a.b),will its this always be Window when called with ()?
是
Is the only way to keep its this as a to pass it as a string to setTimeout() / setInterval()?
不.而是创建一个新功能.
setTimeout(function() { a.b() },100);