【发布时间】:2011-08-19 01:35:44
【问题描述】:
html:
<div id="slide">
<div>This is one</div>
<div>This is two</div>
<div>This is three</div>
</div>
JavaScript:
var slider = {
div: document.getElementById("slide"),
divs: this.div.getElementsByTagName("div")
};
alert(slider.divs.length);
jsfiddle:http://jsfiddle.net/CAzN8/
当我运行它时,Chrome 说 this.div 未定义。这里有什么问题?
[UPDATE] 我发现如果我把代码改成:
var tmp = document.getElementById("slide");
var slider = {
div: tmp,
divs: tmp.getElementsByTagName("div")
};
它有效。但是为什么第一个案例不行呢?
【问题讨论】:
-
这是一个文字对象,而不是“JSON 对象”。 JSON是一种表示数据的文本格式,所以这个问题和JSON一点关系都没有。
-
@wong2 没关系。我认为你的问题很有趣,需要一个标题,以便其他人以后可以阅读它,如果它适用于他们。
-
真的是关于“JavaScript 对象文字中
this的范围规则” -
没错,但是否可以给新手更友好的标题?
-
@tobyodavies JSON 是一种数据交换格式,因此如果您看到一些看起来像 JSON 没有用于该目的的东西,它可能不是。是的,JSON 代表 JavaScript Object Notation,但并不意味着 JavaScript 中的所有对象字面量表示法都自动是 JSON。一方面,JSON 只是 JavaScript 中对象字面量的一部分。另一方面,问题中的特定示例不是有效的 JSON,因为属性名称不在引号中,即使这在 JavaScript 中完全有效。
标签: javascript dom javascript-objects