2009-02-19 1 views
0

Мне нужна функция, которая получает два параметра массива одинаковой длины: имена свойств (строки) и значения свойств.Как добавить свойства, указанные в параметрах runtime для объекта actioncript?

функция должна создать объект со свойствами, так что, для примера, после вызова

var obj:Object = makeObject({"prop1","prop2"},{1,2}); 

тестирующего состояние (obj.prop1 == 1 && obj.prop2 == 2) должно быть правдой.

Я убежден, что это должно быть легко, если вы знаете свой ActionScript - возможно, это всего лишь синтаксис.

последнее дополнение
после перечитывания мой вопрос, кажется, это было не очень легко понять.
Моя проблема заключалась в присвоении имен свойствам, основанным на значениях времени выполнения, то есть с использованием строкового параметра для ссылки на имя свойства.

ответ

3

Object может рассматриваться как карта (или ассоциативный массив) со строками для ключей - я считаю, что это что ты хочешь делать. Вы можете читать ассоциативные массивы в Flex в Adobe's documentation.

private function makeObject(keys : Array, values : Array) : Object 
{ 
    var obj : Object = new Object(); 

    for(var i : int = 0; i < keys.length; ++i) 
    { 
     obj[ String(keys[i]) ] = values[i]; 
    } 

    return obj; 
} 

Это создаст новый Object с ключами, равными значениям в первом массиве и значений, равных элементов во втором массиве.

+0

"условие тестирования (obj.prop1 == 1 && obj.prop2 == 2) должно быть истинным". Это не так, не так ли? – bzlm

+0

Должно быть, если я не замечаю ошибку в своем коде (что, безусловно, возможно ...). К свойствам объекта можно обращаться несколькими способами; как синтаксис ассоциативного массива, так и синтаксис Object.Property разрешают одно и то же, если это то, о чем вы просите. –

+0

спасибо. Мне было трудно объяснить мой вопрос (возможно, это причина, по которой я не смог его обработать), но obj [String (keys [i])] - именно тот ответ, который я искал. –

3

Не уверен, что я понимаю ваш вопрос, но вы можете создать объект с помощью литерала объекта:

var item:Object = {prop1: 1, prop2: 2}; 

trace (item.prop1 == 1 && item.prop2 == 2) // true 
+1

Я считаю, что плакат хочет создать объект с ключами, которые неизвестны во время компиляции, поэтому синтаксис, который вы описываете, в этом случае не будет работать. Имена ключей - это просто строки, переданные в функцию. –