javascript允许给语言的基本类型扩充功能。通过Object.prototype添加方法,可以让该方法对所有对象都可用。这样的方式对函数、数组、字符串、数字、正则表达式和布尔值同样适用。
举例来说,我们可以通过Function.prototype增加方法来使得该方法对所有函数可用:
Function.prototype.method = function(name, func){
this.prototype[name] = func;
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);
});
javascript缺少了一个移除字符串首尾空白的方法。这个小疏忽很容易弥补:
String.method('trim', function(){
return this.replace(/^\s+|\s+$/g, '');
});
通过给基本类型增加方法,我们可以极大地提高语言的表现力。因为javascript原型继承的动态本质,新的方法立刻被赋予到所有的对象实例上,哪怕对象实例是在方法被增加之前就创建好了。
基本类型的原型是公用结构,所以在类库混用时务必小心。一个保险的做法就是中在确定没有该方法时才添加它。
Function.prototype.method = function(name, func){
if(!this.prototype[name]){
this.prototype[name]=func;
}
return this;
};
※摘抄自《JavaScript语言精粹(修订版)》