我总是遇到编程中的情况,我希望在循环中定义一堆变量(例如,soldierA,soldierB,soldierC,...)并将它们分配给某些对象。
someClassA = Ext.extend(someClassB) {
initComponent {
this.weekdays = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday','Sunday'
];
for(var i = 0; i<7; i++) {
var dummy = "this.vacation" +this.weekdays[i];
dummy = 1;
};
console.log("I desire the following to be a 1: " +this.vacationMonday);
}
}
控制台列出了未定义的元素。
建议的行动方案是什么?
答案 0 :(得分:4)
您必须使用括号表示法来设置动态变量名称。另请注意,您必须直接分配,而不是列出它的方式。
this["vacation" + this.weekdays[i]] = 1;
答案 1 :(得分:2)
我强烈建议以不同的方式做。您试图扭曲代码以某种方式工作,而不是自然地构建它。我建议这样做:
someClassA = Ext.extend(someClassB) {
initComponent {
this.weekdays = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday','Sunday'
];
this.vacations = {};
for(var i = 0; i < weekdays.length; i++) {
vacations[this.weekdays[i]] = 1;
};
console.log("I desire the following to be a 1: " +this.vacations['Monday']);
}
}
它使用vacations
对象按名称索引日期而不是一堆不相关的变量。
另外,当你写var dummy = "this.vacation" +this.weekdays[i]; dummy = i
时,你没有按照你的想法行事。我会在这里细分:
var dummy =
:这声明了一个名为“dummy”的变量,并在等号后面赋予它对象。
"this.vacation"
:这是一个包含字母 t h i s v 一 C 一 吨 我 0 名词。这只是那些字母 - 它不是代码,它肯定不会访问this.vacation
。
+this.weekdays[i];
:这会将this.weekdays[i]
的值附加到我们刚刚创建的字符串中。总而言之,我们现在有一个像“this.vacationMonday”这样的字符串。同样,这只是一系列字母 - 它不是代码。
dummy = 1;
:这会抛弃我们创建的字符串,并将数字1分配给dummy
。
答案 2 :(得分:0)
使用var dummy = "this.vacation" +this.weekdays[i];
你实际上只是连接字符串,你希望它访问对象属性并为它添加动态属性,唯一的方法是像Matt King用bracked符号说的那样。
这是有效的,因为Javascript中的对象属性可以使用点表示法访问,或者像带有括号表示法的经典哈希映射一样。例如,请尝试以下代码。
var myObj = {
property1: 'One',
property2: 'Two',
property3: 'Three'
}
document.write(myObj.property1);
document.write(myObj['property2']);
document.write(myObj['property' + 3]);