2010-06-25 5 views
0

J'essaie de transformer la propriété d'un objet en une propriété réelle d'un autre objet.ActionScript Définition des propriétés d'objet à partir d'autres propriétés d'objet?

voici ma variable d'objet:

var propObj:Object = {prop:"width", width:50}; 

maintenant je veux attribuer la propriété d'un sprite en utilisant les propriétés de cet objet. Maintenant, je ne vais même pas essayer parce que je sais que le compilateur explosera tout dans mon visage. mais vous devriez être capable de voir ce que j'essaie de faire. Pourquoi j'essaye de le faire parce que je lis dans un fichier XML avec une liste indéterminée de propriétés utilisables pour des objets spécifiques. donc au lieu d'écrire quelque chose comme une énorme instruction switch pour évaluer si le fichier XML a une valeur pour cette propriété spécifique, j'essaie d'assigner des propriétés dynamiquement en fonction de ce qui est disponible dans le fichier XML.

Si ce que j'essaie de faire est possible, quelle est la meilleure façon de le faire?

Répondre

2

Avec propObj défini comme vous l'avez fait, vous pourriez faire quelque chose comme:

var propObj:Object = {prop:"x", x:50}; 
var sp:Sprite = new Sprite(); 
sp[propObj.prop] = propObj.x; 

Maintenant, d'une manière plus générique et peut-être plus utile de faire ce que vous essayez de faire serait:

var props:Object = {x:10,y:50,unexistentProp:300}; 
for (var propName:String in props) { 
    if(sp.hasOwnProperty(propName)) { 
     sp[propName] = props[propName]; 
    } 
} 

Le code ci-dessus ignore les propriétés qui ne sont pas définies pour l'objet cible. Ceci est nécessaire pour les classes non dynamiques telles que Sprite. Sinon, votre code va lancer une erreur. C'est à vous de décider si vous voulez faire quelque chose à propos des noms de propriété invalides; Si c'est le cas, vous pouvez ajouter le code nécessaire dans un autre. Vous pouvez également détecter une erreur avec un try/catch, mais assurez-vous d'attraper seulement cette attente spécifique - ReferenceError -, ou cela pourrait masquer d'autres erreurs, comme des références nulles, etc. L'autre option serait de ne pas chercher d'erreurs ou essayer/attraper et laissez le code lancer une erreur dans la pile des appels. Cela me semble être une mauvaise idée. Il est préférable de traiter l'erreur dès que possible (et le plus près possible de l'endroit où cela s'est produit).

+0

incroyable. hadOwnProperty est comme une lumière au bout du tunnel! pourquoi n'ai-je pas lu à ce sujet avant ?! ça va rendre la vie tellement plus facile. merci un million! – TheDarkIn1978

Questions connexes