2010-11-05 3 views
0
var o:Object = {title: 'asad'}; 
var v:ImageItemVO = o as ImageItemVO; 
var v:ImageItemVO = ImageItemVO(o); // throws an error 

У моего ImageItemVO есть публичный вар с названием. После выполнения этого кода «var v» имеет значение NULL. Зачем? Может ли кто-нибудь дать мне пример того, как заставить его работать?AS3: Как использовать оператор «как»?

ответ

5

Оператор as используется для литья объекта из одного типа в другой, но работает только в том случае, если объект может быть отброшен таким образом. Если он не может, он даст вам null. Другой способ кастинга (то, как вы это делаете в последней строке), вместо этого даст вам ошибку, если объект не может быть запущен.

В этом случае вы не хотите бросать вообще, кастинг не работает таким образом. Вместо этого, вы, вероятно, хотите сделать что-то вроде этого:

var v: ImageItemVO = new ImageItemVO(); 
v.title = "asad"; 

или если есть больше свойств, и вы не хотите, чтобы напечатать их все вручную:

var o: Object = { ... }; 
var v: ImageItemVO = new ImageItemVO(); 
for (var key: String in o) { 
    v[key] = o[key]; 
} 

Этот код будет копировать все свойства в o до v.

+0

так что .. не все равно, чтобы создать экземпляр ImageItemVO с данными, содержащимися в o? –

+0

yes thats right .. Я забыл об этом методе –

+0

Поскольку вы несериализируете его из объекта - возможно, лучше сделать метод: ImageItemVO :: serialize (o: Object) - где вы можете сделать цикл this [ key] = o [ключ]; – ansiart

Смежные вопросы