本节书摘来自异步社区《JavaScript设计模式》一书中的第1章,第1.9节,作者:张容铭著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.9 函数的祖先
小白回顾着这些从未见过的代码方式内心很激动,小铭见小白对JavaScript如此着迷,于是补充了两句。
“如果你看过prototype.js的代码,我想你会想到下面的书写方式。”
“prototype.js是什么?”小白问道。
“一款JavaScript框架,里面为我们方便地封装了很多方法,它最大的特点就是对源生对象(JavaScript语言为我们提供的对象类,如Function、Array、Object等等)的拓展,比如你想给每一个函数都添加一个检测邮箱的方法就可以这么做。”
Function.prototype.checkEmail = function(){
// 验证邮箱
}
“这样你在使用这个方法的时候就比较方便了,如果你习惯函数形式,那么你可以这么做。”
var f = function(){};
f.checkEmail();
“如果你习惯类的形式你也可以这么做。”
var f = new Function();
f.checkEmail();
“但是你这么做在我们这里是不允许的,因为你污染了原生对象Function,所以别人创建的函数也会被你创建的函数所污染,造成不必要的开销,但你可以抽象出一个统一添加方法的功能方法。”
Function.prototype.addMethod = function(name, fn){
this[name] = fn;
}
“这样如果你想添加邮箱验证和姓名验证方法你可以这样做。”
var methods = function(){};
或者
var methods = new Function();
methods.addMethod('checkName', function(){
// 验证姓名
});
methods.addMethod('checkEmail', function(){
// 验证邮箱
});
methods.checkName();
methods.checkEmail();