制造变量名称

时间:2011-02-17 23:00:23

标签: javascript extjs

我总是遇到编程中的情况,我希望在循环中定义一堆变量(例如,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);
    }
} 

控制台列出了未定义的元素。

建议的行动方案是什么?

3 个答案:

答案 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]);

http://jsfiddle.net/gxy53/