JScript에서 개체의 Expando 특성은 Object 및 Array와 같은 참조 유형에 멤버를 추가하는 중요한 수단이지만 이 방법은 다음과 같은 값 유형에는 작동하지 않습니다.
var str = "string1";
str.method1 = 함수(){
//뭔가를 해라
};
str.method1();//여기서 오류가 발생합니다. 오류 메시지는 str이 존재하지 않으면
해당 문이 실행되지 않는다는 것입니다. 이를 위해 JScript에도 값 유형이 있습니다. 구현은 다음과 같습니다. eval 함수를 사용하여 객체를 복원할 수 있도록 객체(일반적으로)를 문자열 표현으로 변환합니다.
Boolean.prototype.box = 함수(){
return new Boolean( this );
};
Number.prototype.box = 함수(){
새로운 숫자를 반환합니다( this );
};
String.prototype.box = 함수(){
새로운 문자열을 반환합니다( this );
};
Boolean.prototype.unbox = 함수(){
return eval( this.toJSON() );
};
Number.prototype.unbox = 함수(){
return eval( this.toJSON() );
};
String.prototype.unbox = 함수(){
return eval( this.toJSON() );
};box는 박싱을 의미하고, unbox는 언박싱을 의미합니다. 테스트 코드는 다음과 같습니다.
str = true.box();
경고(str);
str = str.unbox();
Alert( str ); 이 시점에서 JScript에는 박싱 작업도 포함되어 있습니다. 이것의 이점은 무엇입니까? 다시 처음의 문장을 살펴보겠습니다. 이때 String, Boolean, Number 세 가지 값 유형을 Object와 마찬가지로 처리할 수 있습니다. 런타임 시 값 유형 변수에 Expando 속성을 추가할 수 있습니다. 매우 편리합니까?
unboxing 작업도 매우 간단합니다. str.unbox()와 같은 것을 호출하면 됩니다.