Javascript 动态创建的对象,它们为什么工作?

Javascript 动态创建的对象,它们为什么工作?,javascript,Javascript,所以我有一个程序,我花了一段时间才弄明白如何动态创建对象。基于其他统计数据。不管怎样,我想知道为什么这真的有效。它为每个td生成一个对象。例如,目前它有100个td元素。我希望能够分离每个td的信息,并能够基于tds id访问它。其中一个很好用 为什么对象可以像其他对象一样访问 我对它为什么起作用的部分感到困惑。我知道这是真的,哈哈 无论如何,这是我的代码。。。它放在html文档的末尾,就在/body之前 <script> (function (){ var list

所以我有一个程序,我花了一段时间才弄明白如何动态创建对象。基于其他统计数据。不管怎样,我想知道为什么这真的有效。它为每个td生成一个对象。例如,目前它有100个td元素。我希望能够分离每个td的信息,并能够基于tds id访问它。其中一个很好用

为什么对象可以像其他对象一样访问

我对它为什么起作用的部分感到困惑。我知道这是真的,哈哈

无论如何,这是我的代码。。。它放在html文档的末尾,就在/body之前

<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>

(功能(){
var list=document.getElementsByTagName(“td”);
var数=0;
var text='';
文本+=”;
text+='var plots={\r';
while(number=list.length-1){
text+='}}\r';
数++
}else(text+='}、\r');
数++
}
文本+=”;
文件。书写(文本);
})();
同样,如果你能帮助我理解,为什么这些工作就像我硬编码的对象一样

基本上,我做了一个脚本,这个脚本。。。我觉得有点奇怪

顺便说一句,在控制台中查看源代码时,\r只是为了使其更具可读性。没有其他原因。当然不需要它们

想知道为什么3dgoo删除了(函数(){在那里并且应该在那里,否则它就不起作用了…谢谢

为什么这些工作就像我硬编码的对象一样

它工作的原因是浏览器如何与脚本标记交互,以及浏览器如何解释javascript

当浏览器遇到脚本标记时,它的默认行为是执行其中的代码

这可以让你做一些强有力的和有表现力的事情,但也可能是头痛的主要原因

实际上,您所做的是修改DOM,即表示HTML结构的底层对象,这会导致浏览器正确呈现内容。因为浏览器的行为是在遇到
标记时执行脚本,所以它会执行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;
})();
var plot=(函数(){
var list=document.getElementsByTagName(“td”);
变量图={};
对于(变量i=0;i
这显示了上述代码的一个交互式示例。注意脚本标记位于body标记中

编辑以添加,从注释:

是的,javascript在运行时被解析,但是当DOM被重新评估时,会导致任何新的javascript被执行。已经执行的代码或已经触发的事件将不会再次执行

为什么这些工作就像我硬编码的对象一样

它工作的原因是浏览器如何与脚本标记交互,以及浏览器如何解释javascript

当浏览器遇到脚本标记时,它的默认行为是执行其中的代码

这可以让你做一些强有力的和有表现力的事情,但也可能是头痛的主要原因

实际上,您所做的是修改DOM,即表示HTML结构的底层对象,这会导致浏览器正确呈现内容。因为浏览器的行为是在遇到
标记时执行脚本,所以它会执行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;
})();
var plot=(函数(){
var list=document.getElementsByTagName(“td”);
变量图={};
对于(变量i=0;i
这显示了上述代码的一个交互式示例。注意脚本标记位于body标记中

编辑以添加,从注释:


是的,javascript在运行时被解析,但是当DOM被重新计算时,这会导致任何新的javascript被执行。已经执行的代码或已经触发的事件将不会再次执行。

您应该修复大括号和块的缩进,并使用比xxx更有意义的变量名,这样您的代码就容易了r进行解密。您正在将其写入脚本标记内的文档,就像您使用“硬编码”一样它。在我看来,这是一种非常糟糕的方式来完成你试图完成的任何事情。顺便说一句。我之所以需要它,是因为我创建了一个与这些对象相关的表。它们以数字的形式给出ID。我需要表单元格直接与一个对象进行响应,这样我就可以访问一个与该单元格相关/保留该单元格信息的键:值对。Tom i不明白这是一种多么糟糕的方式…这一点是确定的,它写在一个脚本标记中。但是脚本不是在运行时解析的吗?所以这些对象在运行时是或不是用原始代码解析的?如果不是,它们为什么会工作…使用
document.write()是不好的
您应该修复大括号和块的缩进,并使用比
xxx有意义的变量名,这样您的代码更容易破译。您正在将其写入脚本标记内的文档,就像使用“硬编码”一样它。在我看来,这是一种非常糟糕的方式来完成你想要完成的任何事情。顺便说一句。我之所以需要它,是因为我创建了一个与这些对象相关的表。它们以数字的形式给出ID。我需要表单元格来