看看这个:
>唯一的方法是将它作为一个字符串传递给setTimeout()/ setInterval()吗?
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@H_301_4@jsFiddle. @H_301_4@假设预期结果是我的预期…… @H_301_4@例1 @H_301_4@当调用对象的属性b()时,这将成为属性的对象,这里是父对象.它产生预期的结果. @H_301_4@例2 @H_301_4@eval()意味着采用它的调用位置的执行上下文,在本例中是window.它还产生预期的结果. @H_301_4@例3 @H_301_4@将字符串传递给setTimeout()时,我想它会遇到与eval()非常相似的东西.它也产生预期的结果. @H_301_4@例4 @H_301_4@在这个例子中,这变成了Window.这就是我感兴趣的. @H_301_4@例5 @H_301_4@这里变成了Window,因为c的父对象是Window. @H_301_4@>当仅传递对函数的引用(例如a.b)时,使用()调用时它是否始终为Window?
>唯一的方法是将它作为一个字符串传递给setTimeout()/ setInterval()吗?