我尝试使用jquery(jquery-2.1.1)和构造函数来构建html。但是当我在for循环中尝试这种方法时,循环无法停止。谁能告诉我它为什么会发生?
下面'代码。非常感谢。
function tag() {
this.addClass = function(...theArgs) {
for (index in theArgs) {
this.$html.addClass(theArgs[index]);
}
}
this.setAttr = function(attr, value) {
this.$html.attr(attr, value);
}
this.append = function(...theArgs) {
for (index in theArgs) {
this.$html.append(theArgs[index]);
}
}
this.find = function(value) {
return this.$html.find(value);
}
this.empty = function() {
this.$html.empty();
}
this.remove = function(value) {
this.find(value).remove();
}
this.clone = function() {
return jQuery.extend(true, {}, this);
}
this.show = function() {
return this.$html[0];
}
}
function label(text) {
tag.call(this);
this.$html = $("<label></label>");
this.append(text);
}
for(var index = 0; index < 2; index++) {
var fieldLabel = new label(1);
console.log(index);
}
答案 0 :(得分:0)
这里的问题是你使用index
(没有var
)作为tag
函数中所有循环的运行变量。 index
变量在最后for-loop
的外部范围内仍然有效(应该以条件>=2
停止)。
在循环开始时,index
为0
。下一个循环应该是1
。但是当进入内部append
方法时,由于循环0
(传入的参数只是for-in
),它会重置回1
,因此传播符号会产生1个长度的数组,for-in
停止且index
设置为0
)。所以在第二个循环结束时它仍然是0
。这意味着它永远不会变得更大值1
(仅在for-loop
的开头增加)。条件< 2
将始终得到满足,for-loop
只会永远运行。
您可以在for-in
中为正在运行的变量使用其他名称。或者只使用index
声明另一个本地范围的var
,如下所示:
this.append = function(...theArgs) {
for (var index in theArgs) {
this.$html.append(theArgs[index]);
}
}
或者更好地使用for-of
作为有人建议。