在JavaScript对象内更改范围

3

当涉及到对象的方法时,作用域仍然让我感到困惑。在下面的代码中,我有两个邻居,每个邻居都有自己的方法。

var counter = 0;
var neighbor1 = {
  name: 'John',
  myFunction: function () {
    console.log(this.name)
    this.doStuff();
  }
};
var neighbor2 = {
  name: 'Bob',
  doOtherStuff: function () {
    console.log(this.name);
    if(counter>5) {
      return false;
    } else {
      counter++;
      this.myFunction();
    }
  }
};

neighbor1.doStuff = neighbor2.doOtherStuff;

neighbor1.myFunction();

当我调用neighbor1.myFunction方法时,它会调用neighbor2.doOtherStuff方法,因为我之前使用了赋值运算符。但是我不明白为什么“this”总是邻居1对象(John),而不是邻居2对象(Bob)。能否简单地解释一下为什么neighbor1始终是“this”?谢谢!

1个回答

1

this 指向执行上下文(函数执行时所在的位置,而不是函数编写时所在的位置)。你正在 neighbor1 调用 this.doStuff(),因此 this 总是指向 neighbor1

如果您希望了解更多关于 this 的内容,我建议阅读这个很棒的 material


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接