2012-03-02 5 views
4

У меня есть функция-конструктор, которая может использоваться для создания экземпляра нового объекта Button. При создании этого объекта вам может быть достаточно одной аргумента. Если этот аргумент является ассоциативным массивом, все значения массива становятся свойствами объекта Button.Динамическое добавление параметров как свойств объекта - JavaScript

Так что я пытаюсь сделать это

function Button(args){ 
    for (arg in args) 
    { 
     //Add the name of arg as property of Button with arg as value. 
    } 
}; 

var button = new Button({ 
        name:"My button", 
        value:"My super special value", 
        color:"black", 
        enabled:false 
      }); 

Что это должно сделать, это создать объект кнопки, как это.

button.name  //should be "My button" 
button.value  //should be "My super special value", 
button.color  //should be "black", 
button.enabled //should be false 

Я не могу понять, как это сделать, потому что, если вы получаете ассоциацию, это строка. И this.arg = args [arg] явно не сработает.

ПРИМЕЧАНИЕ: вход должен быть массивом, и если пользователь поместил бы общий другой ассоциативный массив в качестве аргумента, свойства будут разными. {test:true} будет динамически создавать кнопку с тестовым свойством со значением true.

Это означает, что button.test = true - это не вариант. Он должен быть динамичным.

ответ

5

И this.arg = args[arg] явно не будет работать

this[arg] = args[arg] 
+0

Спасибо !, Я немного смущен тем, что ответ прост. –

+0

@Rick Hoving Вы не должны смущаться, вы не единственный, кто сталкивается с этой проблемой ха-ха;) – Bram

0

Этот

функцию кнопки (арг) { для (арг в аргументах) { это [аргумент] = арг [агд ]; } };

кнопка вара = новая кнопка ({ названия: "Моя кнопка", значения: "Мое супер специального значение", цвета: "черная", включена: ложный });