擴充類型的功能
Javascript允許給語言的基本類型擴充功能。我們把方法加在基本類型的prototype上戈二,使得該方法對所有對象可用。這種方式對函數(shù)觉吭、數(shù)組、字符串鲜滩、數(shù)字、正則表達式和布爾值同樣適用徙硅。
下面我們以以函數(shù)為例,通過給Function.prototype增加方法來使得該方法對所有函數(shù)可用:
這個方法用于提取數(shù)字的整數(shù)部分
Number.prototype.integer = function() {
console.log(this);
return Math[this < 0 ? "ceil" : "floor"](this);
};
console.log((10 / 3).integer()); // 3
我們也可以像下面這樣, 寫一個通用的方法须肆,就不需要每次都打 .prototype...
Function.prototype.method = function(name, func) {
this.prototype[name] = func;
return this;
};
Number.method("integer", function() {
return Math[this < 0 ? "ceil" : "floor"](this);
});
(-10 / 3).integer(); // -3
通過給基本類型增加方法脐往,可以極大的提高語言的表現(xiàn)力。因為JavaScript原型繼承的動態(tài)本質(zhì)业簿,新的方法立刻被賦予到所有的對象實例上, 哪怕對象實例是在方法被增加之前就已經(jīng)創(chuàng)建好了
由于基本類型的原型是公用結(jié)構(gòu)梅尤, 所以在類庫混用的要先判斷該方法是否存在, 以免覆蓋
Function.prototype.method = function(name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
}
return this;
};
參考
- [《JavaScript語言精粹-第四章-擴充基本類型的功能》]