所以我有这个程序,我花了一些时间来弄清楚如何动态创建对象。基于其他统计数据。无论如何,我想知道为什么这实际上有效。它为每个td创建一个对象。例如,目前它有100个td元素。我希望能够为每个td分离信息,并能够根据tds id#来访问它。其中工作正常。
为什么对象可以像任何其他对象一样被访问?
我有点困惑的原因是它的工作原理。我知道它确实大声笑。
无论如何这里是我的代码......它放在/ body之前的html文档的末尾。
<script>
(function (){
var list = document.getElementsByTagName("td");
var number = 0;
var text = '';
text += '<script>';
text += 'var plots = {\r';
while (number <= list.length - 1) {
text += number + ' : {\rstamp : 0\r';
if (number >= list.length - 1) {
text += '}}\r';
number++
} else(text += '},\r');
number++
}
text += '</\script>';
document.write(text);
})();
</script>
再说一遍,如果你能帮助我理解,为什么这些工作好像我硬编码了对象?
基本上,我制作了一个制作脚本的脚本......对我来说有点奇怪。
顺便说一下\ r \ n只是为了让它在控制台中查看源代码时更具可读性。没有其他原因。当然不需要它们。
想知道为什么3dgoo被移除(function(){在那里,应该在那里,否则它不起作用...谢谢。
答案 0 :(得分:3)
为什么这些工作好像我硬编码了???中的对象?
它起作用的原因是浏览器如何与脚本标签交互,以及浏览器如何解释javascript。
当浏览器遇到脚本标记时,默认行为是执行其中的代码。
这可以让你做一些有力和富有表现力的事情,但也可能是头痛的主要来源。
您正在做的,实质上是修改DOM,即表示HTML结构的底层对象。您正在为其编写HTML(在本例中为<script>
标记),这会导致浏览器正确呈现内容。由于浏览器的行为是在遇到<script>
标记时执行脚本,因此它会执行您的javascript。当它执行你的javascript时,它会创建一个名为“plot”的全局变量,然后可以在全局命名空间中访问它。
这可以让你做同样的事情,但没有document.write。
var plot = (function () {
var list = document.getElementsByTagName("td");
var plots = {};
for(var i = 0; i < list.length; ++i) {
plots[i] = {'stamp': 0};
}
return plots;
})();
此plunker显示上述代码的交互式示例。 注意脚本标记位于正文标记中。
编辑以添加,来自评论:
是的,javascript在运行时被解析,但是当重新评估DOM时,会导致执行任何新的javascript。已执行的代码或已触发的事件将不再执行。