提问人:Stephan Kristyn 提问时间:7/26/2010 最后编辑:Daniel VassalloStephan Kristyn 更新时间:7/26/2010 访问量:5393
JavaScript:在 Array Literal 中访问自己的 Object 属性
JavaScript: Access own Object Property inside Array Literal
问:
给定 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]
答:
2赞
Anurag
7/26/2010
#1
该属性不指向对象。如果我们要在全局范围内定义 myPic 属性,那么你会看到使用该值初始化。请看这个例子: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>
this
是 JavaScript 中最难的概念之一。您可能会喜欢这篇关于该主题的文章。
10赞
Christian C. Salvadó
7/26/2010
#2
该值不会像那样工作,它指的是由实际执行上下文确定的值,而不是您的对象字面量。this
例如,如果声明对象的函数成员,则可以获得所需的结果:
var closure = {
myPic: document.getElementById('pic1'),
getPicArray: function () {
return [this.myPic];
}
};
//...
closure.getPicArray();
因为函数内部的值将引用您的对象。this
getPicArray
closure
请参阅另一个问题的答案,我在其中解释了关键字的行为。this
编辑:作为对您的评论的回应,在我提供的示例中,该方法将在每次调用时生成一个新的 Array 对象,并且由于您想要存储数组并对其进行更改,因此我建议您这样做,分两步构建您的对象:getPicArray
var closure = {
myPic: document.getElementById('pic1')
};
closure.picArray = [closure.myPic];
然后,您可以毫无问题地修改成员。closure.picArray
评论
0赞
Stephan Kristyn
7/26/2010
谢谢!很好的答案。那么,您将如何持久地修改数组呢?
0赞
Christian C. Salvadó
7/26/2010
@Stephan,谢谢!在我的第二个示例中,您可以简单地使用该属性,例如picArray
closure.picArray.push("foo");
评论