构造函数中的范围错误(ES6)

时间:2017-01-14 13:14:23

标签: javascript ecmascript-6 referenceerror

我遇到了一个奇怪的错误 我正在使用新版本的ES6。当我运行这段代码时,我得到了ReferenceError: alertBox is not defined。有没有办法在这个函数里面调用alertBox?在此先感谢:)

这是代码

class main {
    constructor(data){
    this.data=data;

    // this one works
    this.alertBox(this.data);

    this.watchFile(function(){
      // this one throws error
      this.alertBox(this.data);
    });
    }

  alertBox(data){
    alert(data);
  }

  watchFile(cb){
    cb("changed");
  }
}

// app.js
new main("hello");

您可以在此处找到代码段:https://repl.it/FJUo

1 个答案:

答案 0 :(得分:0)

通过将正常函数传递到watchFile,您将失去this的上下文。在ES6中,您可以使用"箭头功能"语法来创建一个保持正确上下文的函数。

this.watchFile(() => {
    this.alertBox(this.data);
});