bien la raison pour laquelle ... hmmm ... peu compliqué à expliquer ...
bien ... ActionScript est prototype-oriented, comme ECMA-script ... les classes ne sont que du sucre syntaxique introduit par actionscript 2 (ce qui a changé encore une fois en AS3, mais c'est un autre sujet) ...
donc si c'est le code d'origine:
class com.weatherwidget.City {
var zipCode:String;
var forecastText:Array = new Array(5);
}
alors c'est, ce qui se passe réellement:
//all classes get stuffed into _global, with packages being a property path:
if (_global.com == undefined) _global.com = {};
if (_global.com.weatherwidget == undefined) _global.com.weatherwidget = {};
//and the actual definition:
_global.com.weatherwidget.City = function() {};
_global.com.weatherwidget.City.prototype = { forecastText:new Array(5) }
l'objet prototype de City
, qui sert de prototype pour les instances de City
, a une propriété appelée forecastText
, qui est une Array
de longueur 5 ... donc lors de la recherche forecastText
sur une instance de City
, il ne peut pas être trouvé directement et sera recherché dans la chaîne prototype ... il sera trouvé dans le prototype de l'instance ... ainsi, toutes les instances partagent le même Array
...
la différence est, que le deuxième exemple obtient à:
//same thing here:
if (_global.com == undefined) _global.com = {};
if (_global.com.weatherwidget == undefined) _global.com.weatherwidget = {};
//and the actual definition this time:
_global.com.weatherwidget.City = function() { this.forecastText = new Array(5); };
_global.com.weatherwidget.City.prototype = {}
que vous avez sans doute remarqué, a déclaré les membres ne sont une chose si rien ne compiletime ... est attribué à eux, ils vont tout simplement ne pas exister lors de l'exécution ...
bien
, ce explenation exige, que vous connaissez soit JavaScript ou ActionScript 1 un peu, mais j'espère que cela aide ...
greetz
back2dos
Si quelqu'un peut suggérer un nom plus question pour cette question s'il vous plaît laissez-moi savoir. – Anton
La réponse acceptée explique pourquoi cela se produit, et ma réponse le fait fonctionner correctement. – Anton