为什么可以';我使用';这';当创建这个javascript对象时?
html:为什么可以';我使用';这';当创建这个javascript对象时?,javascript,dom,javascript-objects,Javascript,Dom,Javascript Objects,html: <div id="slide"> <div>This is one</div> <div>This is two</div> <div>This is three</div> </div> jsfiddle: 当我运行这个程序时,Chrome说,this.div未定义。这里怎么了 [更新]我发现如果我将代码更改为: var tmp = document.getEl
<div id="slide">
<div>This is one</div>
<div>This is two</div>
<div>This is three</div>
</div>
jsfiddle:
当我运行这个程序时,Chrome说,this.div
未定义。这里怎么了
[更新]我发现如果我将代码更改为:
var tmp = document.getElementById("slide");
var slider = {
div: tmp,
divs: tmp.getElementsByTagName("div")
};
它起作用了。但是为什么第一个案例不能工作呢?您不能使用它的原因是因为JSON对象实际上还没有初始化。这就是我将如何做你想做的事情:
var slider = {
my_div: document.getElementById("slide");
};
slider.my_divs = slider.my_div.getElementsByTagName("div");
alert(slider.my_divs.length);
或
这个是什么,由被调用的方法动态决定,而不是由代码所在的词法块决定 简单地在JSON对象的主体中使用
this
,并不意味着它引用正在构造的对象。它几乎肯定是指全局窗口对象
如果您希望能够使用此
,您需要一个构造函数:
function Slider(id,tagName){
this.div = document.getElementById(id);
this.divs = this.div.getElementsByTagName(tagName);
}
s = new Slider('slide','div')
因为对象实际上还没有被实例化。但这将起作用:
var slider = {
div: document.getElementById("slide"),
divs: document.getElementById("slide").getElementsByTagName("div")
};
或
您的代码不起作用,因为在创建对象文字(括号内的内容)时,对象还不存在,因此
此
未定义
这就像认为你可能是你自己的父亲,你在创造的那一刻并不存在。因为
在那种背景下,这个不是你正在构建的对象。哦,是的!当我构造滑块
时,是否可以参考滑块
的我的分区
?我的意思是,我不想要一个my_div
外部slider
查看我的答案,了解如何使用构造函数正确使用这个(注意new
关键字的使用),它是一个文本对象,而不是一个“JSON对象”。JSON是一种表示数据的文本格式,所以这个问题与JSON毫无关系。@wong2没关系。我认为你的问题很有趣,需要一个标题,以便其他人以后可以阅读,如果它适用于他们的话。实际上,这是关于“JavaScript对象文本内部的的范围规则”的问题。是的,但是一个对新手更友好的标题可能吗?@tobyodavies JSON是一种数据交换格式,因此,如果您看到一些看起来像JSON的东西没有用于此目的,那么它可能不是。是的,JSON代表JavaScript对象表示法,但并不意味着JavaScript中的所有对象文字表示法都自动成为JSON。首先,JSON只是JavaScript中对象文本的子集。另一方面,问题中的具体示例不是有效的JSON,因为属性名不在引号中,即使在JavaScript中完全有效。这个
不应该是未定义的,它应该是窗口
对象。我说的不是保留字,而是它的含义。也许我应该说“未申报”
function Slider(id,tagName){
this.div = document.getElementById(id);
this.divs = this.div.getElementsByTagName(tagName);
}
s = new Slider('slide','div')
var slider = {
div: document.getElementById("slide"),
divs: document.getElementById("slide").getElementsByTagName("div")
};
var slider = {};
slider.div = document.getElementById("slide");
slider.divs = slider.div.getElementsByTagName("div");