【问题标题】:Changing scope inside javascript objects更改 javascript 对象内的范围
【发布时间】:2018-12-06 23:06:10
【问题描述】:

在使用对象的方法时,我仍然对范围感到困惑。在下面的代码中,我有两个邻居。每个人都有自己的方法。

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'总是neighbor1对象(John)而不是neighbor2对象(Bob)。有人可以简单地解释一下为什么neighbor1总是'this'吗?谢谢!

【问题讨论】:

    标签: javascript object scope


    【解决方案1】:

    this 总是引用/指向执行上下文(从您执行函数的位置,而不是从您编写函数的位置)。您在 neighbor1 调用 this.doStuff(),因此 this 始终指向 neighbor1

    如果您想了解更多关于this 的信息,我建议您学习这个很棒的material

    【讨论】:

      猜你喜欢
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2013-02-17
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      相关资源
      最近更新 更多