2011-02-17 58 views
1

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

代码格式化borked –

+0

我试图与'标签unbork,但它不工作。 – ppecher

回答

4

您必须使用括号表示来设置动态变量名称。另外请注意,您必须直接进行分配,而不是您列出的方式。

this["vacation" + this.weekdays[i]] = 1; 
+0

更正的变量分配。 –

+0

优秀!谢谢 – ppecher

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":这是包含字母ħ小号的字符串。v一个Ç一个吨öÑ。它只是那些字母 - 它不是代码,它绝对不会访问this.vacation

+this.weekdays[i];:这会将this.weekdays[i]的值附加到我们刚创建的字符串。总之,我们现在有一个像“this.vacationMonday”这样的字符串。再次,这只是一系列字母 - 它不是代码。

dummy = 1;:这会丢弃我们创建的字符串并将数字1指定为dummy

+0

感谢您的解释和您的推荐方法。 – ppecher

0

var dummy = "this.vacation" +this.weekdays[i];你实际上只是连接字符串,你想要它访问对象属性并添加动态属性,唯一的方法就是像马特金说的那样。

这是可行的,因为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/

+1

这是对Matt为什么有效的原因的一个很好的解释。谢谢。 – ppecher