L'attribut expando des objets dans JScript est un moyen important d'ajouter des membres aux types référence tels que Object et Array, mais cette méthode ne fonctionne pas pour les types valeur, tels que
var str = "chaîne1";
str.method1 = fonction(){
//faire quelque chose
};
str.method1();//Il y aura une erreur ici. Le message d'erreur (j'ai oublié) est que si str n'existe pas,
une telle instruction ne s'exécutera pas. En programmation C#, il existe des opérations de boxing et de unboxing pour. types de valeur. pour le convertir en type de référence. Pour cela, il existe également des types de valeur dans JScript. L'implémentation est la suivante. Le fonctionnement de toJSON() est montré ici. convertir l'objet (d'une manière générale) en une représentation de caractère afin que l'objet puisse être restauré à l'aide de la fonction eval.
Boolean.prototype.box = fonction(){
return new Boolean(this);
} ;
Numéro.prototype.box = fonction(){
renvoyer un nouveau numéro (this);
} ;
String.prototype.box = fonction(){
return new String(this);
} ;
Boolean.prototype.unbox = fonction(){
return eval( this.toJSON() );
} ;
Numéro.prototype.unbox = fonction(){
return eval( this.toJSON() );
} ;
String.prototype.unbox = fonction(){
return eval( this.toJSON() );
};box signifie boxing, unbox signifie unboxing. Le code du test est le suivant :
str = true.box();
alerte(str);
str = str.unbox();
alert( str ); À ce stade, notre JScript a également des opérations de boxe. Quels en sont les avantages ? Regardons à nouveau l'instruction au début. À ce stade, nous pouvons traiter les trois types de valeur String, Boolean et Number comme Object. Nous pouvons ajouter l'attribut expando aux variables de type valeur au moment de l'exécution. très pratique ?
L'opération de déballage est également très simple, il suffit d'appeler quelque chose comme str.unbox().