JScript のオブジェクトの Expando 属性は、Object や Array などの参照型にメンバーを追加する重要な手段ですが、このメソッドは次のような値型には機能しません。
var str = "文字列1";
str.method1 = function(){
//何かをする
};
str.method1();//ここでエラーが発生します。(忘れていましたが) str が存在しない場合、
そのようなステートメントは実行されません。これを参照型に変換するために、JScript にも同様の操作を行うことができます。その関数は次のとおりです。 eval 関数を使用してオブジェクトを復元できるように、オブジェクトを文字列表現に変換します。
Boolean.prototype.box = function(){
new Boolean( this ) を返します。
};
Number.prototype.box = function(){
新しい数値( this )を返します;
};
String.prototype.box = function(){
新しい文字列( this )を返します;
};
Boolean.prototype.unbox = function(){
return eval( this.toJSON() );
};
Number.prototype.unbox = function(){
return eval( this.toJSON() );
};
String.prototype.unbox = function(){
return eval( this.toJSON() );
};box はボックス化を意味し、unbox はボックス化を解除することを意味します。テストコードは次のとおりです。
str = true.box();
アラート(文字列);
str = str.unbox();
この時点で、JScript にはボックス化操作も含まれています。これにはどのような利点があるでしょうか。もう一度冒頭のステートメントを見てみましょう。このとき、String、Boolean、Number の 3 つの値型を実行時に値型変数に追加できます。とても便利ですか?
ボックス化解除操作も非常に簡単で、str.unbox() などを呼び出すだけです。