javascript – 为什么在将函数参数作为字符串或引用传递时,`this`会发生变化?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么在将函数参数作为字符串或引用传递时,`this`会发生变化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
看看这个:
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

jsFiddle.

假设预期结果是我的预期……

例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);
原文链接:https://www.f2er.com/js/240650.html

猜你在找的JavaScript相关文章