JScript中實值型別的封箱與拆箱

來源:互聯網
上載者:User
js|jscript

JScript中對象的expando屬性是對Object,Array等參考型別增加成員的一種重要手段,但這種手段在對實值型別時就不行了,比如
var str = "string1";
str.method1 = function(){
//do something
};

str.method1();//這裡將出錯,錯誤資訊(我忘記了)是說str不存在該方法

這樣的語句就會運行不了,而在C#編程中實值型別存在裝箱與拆箱操作來將其轉換為參考型別,對此,JScript中也存在實值型別,我們也可以做個類似操作,其實現如下,其中toJSON()的操作見這裡,其作用是將對象(泛指)用字串表示出來,以便使用eval函數還原該對象。
Boolean.prototype.box = function(){
    return new Boolean( this );
};
Number.prototype.box = function(){
    return new Number( this );
};
String.prototype.box = function(){
    return new String( 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();
alert( str );
str = str.unbox();
alert( str );至此,我們JScript也有了裝箱操作,這有什麼好處呢?再看看開頭那段語句吧,此時我們就可以像對待Object一樣對待String,Boolean,Number這三種實值型別,就可以在運行時為實值型別的變數增加expando屬性,這樣是不是很方便呢?
而拆箱操作也很簡單,只需要調用類似str.unbox()就搞定。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。