代码之家  ›  专栏  ›  技术社区  ›  Stephan Kristyn

JavaScript:访问数组文本中自己的对象属性

  •  5
  • Stephan Kristyn  · 技术社区  · 14 年前

    给定JavaScript对象中的数组文本,访问其自身对象的属性似乎不起作用:

     var closure =  {
    
             myPic : document.getElementById('pic1'),
             picArray: [this.myPic]
     }    
    
     alert(closure.picArray[0]); // alerts [undefined]
    


    然而,通过访问其他JavaScript对象来声明数组项似乎是可行的

     ​var closure1 = {
     ​    
     ​     myPic : document.getElementById('pic1')
     ​}
     ​    
     ​var closure2 =  {
     ​  
     ​        picArray: [closure1.myPic]
     ​}    
     ​    
     ​alert(closure2.picArray[0]); // alerts [object HTMLDivElement]
    


    例子: http://jsfiddle.net/5pmDG/

    2 回复  |  直到 14 年前
        1
  •  10
  •   Community Neeleshkumar S    7 年前

    这个 this 值不会像那样工作,它是指由实际执行上下文确定的值,而不是对象文本。

    例如,如果声明对象的函数成员,则可以得到所需的结果:

    var closure =  {
      myPic: document.getElementById('pic1'),
      getPicArray: function () {
        return [this.myPic];
      }
    };
    //...
    closure.getPicArray();
    

    价值,在 getPicArray closure 对象。

    看到了吗 this answer 另一个问题,我在这里解释 关键字。

    编辑: 格特皮卡雷 方法将在每次调用时生成一个新的数组对象,由于您希望存储该数组并对其进行更改,因此我建议您执行以下操作:分两步构造对象:

    var closure =  {
      myPic: document.getElementById('pic1')
    };
    closure.picArray = [closure.myPic];
    

    然后可以修改 closure.picArray 没有问题的成员。

        2
  •  2
  •   Anurag    14 年前

    这个 this 属性不指向 closure picArray 用该值初始化。考虑这个例子:

    <script>
    window.myPic = "Global myPic";
    
    var closure =  {
        myPic : document.getElementById('pic1'),
        picArray: [this.myPic] // this refers to the global object
    };
    
    console.log(closure.picArray); // ["Global myPic"];
    </script>
    

    是JavaScript中最难理解的概念之一。你可能会喜欢这个 article

    推荐文章