动态创建对象,为什么它们有效?

时间:2013-06-03 04:09:32

标签: javascript

所以我有这个程序,我花了一些时间来弄清楚如何动态创建对象。基于其他统计数据。无论如何,我想知道为什么这实际上有效。它为每个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(){在那里,应该在那里,否则它不起作用...谢谢。

1 个答案:

答案 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。已执行的代码或已触发的事件将不再执行。