为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ITMISS 2023-04-20 09:57:17
我有一些代码不起作用,我不明白为什么。我把它归结为这个简单的例子: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 函数中未定义?有没有办法让它与我想要的结构(第二种形式)一起工作?
查看完整描述

4 回答

?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

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



查看完整回答
反对 回复 2023-04-20
?
慕容森

TA贡献1853条经验 获得超18个赞

这会起作用。放入调用的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();


查看完整回答
反对 回复 2023-04-20
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

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



查看完整回答
反对 回复 2023-04-20
?
RISEBY

TA贡献1856条经验 获得超5个赞

我相信这与范围界定有关。


this.data.isLoaded指的是load2的当前范围


this.system = {

        load2: function() {

            console.log(this.data.isLoaded);

        }

    };


查看完整回答
反对 回复 2023-04-20
  • 4 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信