【问题标题】:Why is object data undefined in method?为什么方法中未定义对象数据?
【发布时间】:2020-10-06 15:59:18
【问题描述】:

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

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 函数中未定义?有没有办法让它使用我想要的结构(第二种形式)?

谢谢。

【问题讨论】:

    标签: javascript object javascript-objects


    【解决方案1】:

    运行console.log(this) 总是一个好主意。一切都与“this”所指的有关。

    【讨论】:

      【解决方案2】:

      这会奏效。 将this.data 放入名为parentData 的函数scope 变量中,您可以在任何孩子上使用该值。

      this.system.load2中的this引用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();

      【讨论】:

        【解决方案3】:

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

        this.data.isLoaded是指当前load2的作用域

        this.system = {
                load2: function() {
                    console.log(this.data.isLoaded);
                }
            };
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-14
            • 1970-01-01
            • 2020-04-14
            • 1970-01-01
            • 1970-01-01
            • 2015-12-06
            相关资源
            最近更新 更多