JavaScript允許為語言的基本數據類型定義方法。通過為Object.prototype添加原型方法,該方法可被所有的對象使用。這樣的方式對函數、數組、字符串、數字、正則表達式和布爾值都適用。例如,通過給Function.prototype增加方法,使該方法對所有函數可用。
Function.prototype.method=function(name,func){
this.prototype[name]=func;
return this;
};
為Function.prototype增加一個method方法後,就不必使用prototype這個屬性了,然後調用method方法直接為各種基本類型添加方法。
JavaScript並沒有單獨的整數類型,因此有時候只提取數字中的整數部分是必要的。JavaScript本身提供的取整方法有些不太好,下面通過為Number.prototype添加一個integer方法來改善它。
Number.method('integer',function{
return Math[this<0?'ceil':'floor'](this);
});
document.writeln((-10/3).integer);//-3
Number.method方法能夠根據數字的正負來判斷是使用Math.ceiling還是Math.floors,這樣就避免了每次都編寫上面的代碼。
String.method('trim',function{
return this.replace(/^\s+|\s+$/g,'');
});
document.writeln('"'+"abc".trim+'"');//'abc''
trim方法使用了一個正則表達式,把字符串中左右兩側的空格符清除掉。
通過為基本類型擴展方法,可以大大提高語言的表現力。由於JavaScript原型繼承的本質,因此,所有原型方法立刻被賦予到所有的實例,即使該實例在原型方法創建之前就創建好了。
注意:基本類型的原型是公共結構,在擴展基類時務必小心,避免覆蓋掉基類的原生方法。一個穩妥的做法就是在確定沒有該方法時才添加它。
Function.prototype.method=function(name,func){
if(!this.prototype[name]){
this.prototype[name]=func;
return this;
}
};
另外,for in語句用在原型上時表現很糟糕。可以使用hasOwnProperty方法篩選出繼承而來的屬性,或者查找特定的類型。