javascript允许给语言的基本类型扩充功能,通过给Ojbject.prototype添加方法,可以让该方法对所有对象适用。这样的方式对数组、函数、字符串、数字、正则表达式和布尔值都适用。
比如,我们可以给Function.prototype增加方法来使得该方法对所有函数可用:
Function.prototype.method=function(name,fun){
this.prototype[name]=fun;
return this;
};
我们可以给Function.prototype增加一个method方法,我们下次给对象增加方法的时候就不必键入prototype几个字符,省掉麻烦。
javascript没有专门的整数类型,但是有时候需要提取数字中的整数部分。javascript本身提供的取证方法有点丑陋,我们可以通过给Number.prototype增加一个integer方法来改善它。她根据数字的正负来判断使用Math.ceiling还是Math.floor
Number.method("integer",function(){
return Math[this<0?"ceil":"floor"](this);
});
document.write((-10/3).integer());//-3
js中缺少一个移除字符串收尾空白的方法,可以:
String.method("trim",function(){
return this.replace(/^\s+|\s+$/g,"");
});
document.writeln("''"+" neat ".trim()+"''");
因为js原型继承的动态本质,新的方法立刻被赋予到所有对象的实例上,那么对象实例是在方法被增加之前就创建好了。
基本类型的原型是公用结构,所有在类库混用时务必小心,一个保险的做法是在确定没有该方法时才添加它,
Function.prototype.method=function(name,fun){
if(!this.prototype[name]){
this.prototype[name]=fun;
}
return this;
};