为什么对象数据在方法中未定义?

我有一些代码不起作用,我不明白为什么。我把它归结为这个简单的例子:


function Load() {

    this.data = {

        isLoaded: false,

    };


    this.load1 = function() {

        console.log(this.data.isLoaded);

    };


    this.system = {

        load2: function() {

            console.log(this.data.isLoaded);

        }

    };

}


let a = new Load();

a.load1();

a.system.load2();

为什么 this.data 在 load1 函数中定义,而在 load2 函数中未定义?有没有办法让它与我想要的结构(第二种形式)一起工作?


ITMISS
浏览 76回答 4
4回答

料青山看我应如是

运行 console.log(this) 总是一个好主意。都是关于“这个”指的是什么。

慕容森

这会起作用。放入调用的this.data函数scope变量中parentData,您可以在任何子项上使用该值。thisinthis.system.load2引用this.system内容,它不会调用父数据。function Load() {  this.data = {    isLoaded: false,  };    var parentData = this.data;  this.load1 = function() {    console.log(this.data.isLoaded);  };  this.system = {    load2: function() {      console.log(parentData.isLoaded);    }  };}let a = new Load();a.load1();a.system.load2();

慕无忌1623718

当您显式绑定上下文时它将起作用:a.system.load2.call(a);

RISEBY

我相信这与范围界定有关。this.data.isLoaded指的是load2的当前范围this.system = {        load2: function() {            console.log(this.data.isLoaded);        }    };
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript