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