Javascript无法通过使用此方法调用的方法设置属性

时间:2019-02-17 13:04:03

标签: javascript this

在下面的Java代码中,第一次成功调用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();

1 个答案:

答案 0 :(得分:1)

函数get是基于其调用方式的上下文。像这样

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

但是,当您像这样运行它时:

writeData

尽管var sr = this.saveResult; sr("abc"); 引用了该函数,但它是从sr上下文调用的,因此无法正常工作。您可以使用window方法调用它,并提供如下上下文:

.call