【问题标题】:How can an object's property access other property? [duplicate]一个对象的属性如何访问其他属性? [复制]
【发布时间】:2014-07-06 12:48:07
【问题描述】:

为什么我不能在 javascript 中做这样的事情?

var big = { a:1, b:2, c:3, d:big.a }

一个对象的一个​​属性如何访问另一个?

//--------------------------------编辑如下 ---------- ------------------------------------

感谢大家的回答,现在我发现了另一个问题:

当我这样做时:

var big =  {
        a : 1,
        b : 2,
        c : 3,
        d : this.a
    }
   console.log(big.d);

未定义

但是,当我这样做时:

var big =  {
        a : 1,
        b : 2,
        c : 3,
        d : function(){console.log(this.a)}
    }

 big.d();

它注销 1

我想知道这里发生了什么,是因为它是第二个代码中的一个函数,以某种方式使“this”可以访问?

谢谢。

【问题讨论】:

    标签: javascript object scope closures


    【解决方案1】:

    你可以这样做

    var big = { a:1, b:2, c:3};
    big.d = big.a;
    

    当您使用d:big.a 时,在您的代码中它仍未定义,即。 big 未定义

    【讨论】:

      【解决方案2】:

      试试这个

      var big = new function ()
              {
                  this.a = 1;
                  this.b = 2;
                  this.c = 3;
                  this.d = this.a;
              }
      
              alert(big.a);
              alert(big.b);
              alert(big.c);
              alert(big.d);
      

      希望这会有所帮助。

      【讨论】:

      • 嗨@phoenixinobi,请问您为什么将它变成原始对象以外的函数?这里有什么区别?
      • 您使用的只是一个对象文字。当您定义对象字面量时,会立即分配成员。所以你变得未定义,因为在定义对象文字时你不能访问“this”。函数也会立即分配给成员,但 javascript 处理函数的方式不同。函数仅在调用时执行。因此,即使您已将 big.d 定义为一个函数,但其​​中的代码在您调用它之前不会被执行。这就是您可以在 big.d 函数中访问 this.a 的原因。
      • 如果你只是为了方便申报,可以使用我上面的例子。我也想过让 big.d 成为一个函数,但意识到它并不漂亮,不妨将 big 声明为一个对象,而不仅仅是一个对象字面量。您使用“函数”在 javascript 中声明对象。
      【解决方案3】:

      由于在实际声明big 时尚未声明变量big 以获取big.a。在这种情况下,您应该在之后注入对象 d

      var big = { a:1, b:2, c:3 };
      big.d = big.a;
      

      【讨论】:

        【解决方案4】:

        你不能在对象字面量中做到这一点。这是因为= 的右侧是在分配发生之前评估的。 Javascript首先使用给定的属性创建一个对象,然后将其分配给变量。因此,当您尝试访问big.a 时,尚未进行分配,因此big 未定义,您将收到错误,因为您无法访问undefined 的属性。

        分配后需要分配big.d

        var big = { a:1, b:2, c:3};
        big.d = big.a;
        

        【讨论】:

          猜你喜欢
          • 2018-07-07
          • 2020-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多