扩充类型的功能
Javascript允许给语言的基本类型扩充功能。我们把方法加在基本类型的prototype上,使得该方法对所有对象可用。这种方式对函数、数组、字符串、数字、正则表达式和布尔值同样适用。
下面我们以以函数为例,通过给Function.prototype增加方法来使得该方法对所有函数可用:
这个方法用于提取数字的整数部分
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
通过给基本类型增加方法,可以极大的提高语言的表现力。因为JavaScript原型继承的动态本质,新的方法立刻被赋予到所有的对象实例上, 哪怕对象实例是在方法被增加之前就已经创建好了
由于基本类型的原型是公用结构, 所以在类库混用的要先判断该方法是否存在, 以免覆盖
Function.prototype.method = function(name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
}
return this;
};
参考
- [《JavaScript语言精粹-第四章-扩充基本类型的功能》]
网友评论