Атрибутexpando объектов в JScript является важным средством добавления членов к ссылочным типам, таким как Object и Array, но этот метод не работает для типов значений, таких как
вар стр = "строка1";
стр.метод1 = функция(){
//сделать что-нибудь
};
str.method1();//Здесь будет ошибка. Сообщение об ошибке (я забыл) заключается в том, что если str не существует,
такой оператор не будет выполняться. В программировании на C# существуют операции упаковки и распаковки. типы значений, чтобы преобразовать его в ссылочный тип. Для этого в JScript также есть типы значений. Здесь показана следующая реализация. преобразовать объект (вообще говоря) в символьное представление, чтобы объект можно было восстановить с помощью функции eval.
Boolean.prototype.box = функция(){
вернуть новое логическое значение (это);
};
Number.prototype.box = функция(){
вернуть новый номер (это);
};
String.prototype.box = функция(){
вернуть новую строку (это);
};
Boolean.prototype.unbox = функция(){
return eval(this.toJSON());
};
Number.prototype.unbox = функция(){
return eval(this.toJSON());
};
String.prototype.unbox = функция(){
return eval(this.toJSON());
};box означает упаковку, unbox означает распаковку. Тестовый код выглядит следующим образом:
стр = true.box();
предупреждение (стр);
стр = стр.unbox();
alert( str ); На данный момент в нашем JScript также есть операции упаковки. Каковы преимущества этого? Давайте еще раз посмотрим на оператор в начале. На данный момент мы можем обрабатывать три типа значений: String, Boolean и Number так же, как Object. Мы можем добавить атрибутexpando к переменным типа значения во время выполнения. Разве это не так? очень удобно?
Операция распаковки также очень проста: просто вызовите что-то вроде str.unbox().