Javascript无法使用此[duplicate]调用的方法设置属性

问题描述 投票:1回答:1

这个问题在这里已有答案:

在下面的Javascript代码中,第一次从writeData调用saveResult成功而第二次调用没有,请帮忙。

class SimpleClass {

  constructor() {
    this.ir = "";
  }

  saveResult(res) {
    console.log("entered save result")
    this.ir = res;
    console.log("value saved is " + this.ir);
    console.log("end save result");
  }

  writeData() {
    this.saveResult("abc"); //works fine

    var sr = this.saveResult;
    sr("abc"); //throws error -> Cannot set property 'ir' of undefined
  }
} //end of class

function testLocally() {
  var sc = new SimpleClass();
  var wr = sc.writeData();
  console.log("done");
}

testLocally();
javascript this
1个回答
1
投票

函数获取是基于如何调用它的上下文。当你称之为

this.saveResult("abc"),函数内部的this将引用调用它的this,在你的情况下是类上下文,因为你创建了一个类的实例并从类实例中调用了writeData方法,导致this中的writeData引用类上下文。

但是当你像这样运行它:

var sr = this.saveResult;
sr("abc"); 

尽管sr具有对该函数的引用,但它从window上下文中调用,因此它无法正常工作。您可以使用.call方法调用它并提供如下上下文:

var sr = this.saveResult;
sr.call(this, "abc");
© www.soinside.com 2019 - 2024. All rights reserved.