阅读《js是设计模式》第一章心得
1、明白自己
明白了自己写的代码为什么难懂且臃肿,不方便阅读且效率低。最主要的是为什么整套流程下来只能我一个人写,因为这样的代码根本没有团队力,协同能力差。对js理解的不过透彻。
2、真正的学会对象与类的区别
类 :对一群具有相同特征的对象的集合的描述;
对象:真实存在的对象个体;
比如人类,指的是一个范围; 对象:比如某个人,指的是这个范围中具体的对象。
Javascript中的function作为构造函数时,就是一个类,搭配上new操作符,可以返回一个对象。
当然,要生成一个对象,也可以用字面量的形式,例如var obj = {x: 1, y: function(){} };
类可以理解为一个模板,而对象就是根据这个模板造出来的具体实例。
3、在函数的原型中添加统一添加方法的功能方法
一般不把功能函数封装在原型里面,因为这样会污染全局,造成不必要的开销。所以我会抽象出一个统一的添加方法的功能方法。
例如:
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();
4、函数链式添加方法
在原型中添加功能的方法中添加返回this语句,这样每次添加完一个方法后都会返回methods函数。
Function.prototype.addMethod= function(name,fn){
this[name]=fn;
return this;
}
也可以为每个添加的方法返回this。
var methods = function(){};
methods.addMethod(‘checkName’,function(){
//验证姓名
return this;
}).addMethod(‘checkEmail’,function(){
//验证邮箱
return this;
});
methods.checkName().checkEmail();
这是用函数式的调用方式
5、类式的调用方式(链式添加)
Function.prototype.addMethod = function(name,fn){
this.prototype[name]=fn;
return this;
}
var Methods = function(){};
Methods.addMethod(‘checkName’,function(){
//验证姓名
return this
}).addMethod(‘checkEmail’,function(){
//验证邮箱
});
但是这时候我们就不能直接使用了,要通过new关键字来创建新的对象了。
var m = new Methods();
m.checkEmail().checkEmail()
两个疑惑:1、函数添加方法的功能方法语句为什么是this[name],为什么是这样写的?
2、类式添加方法的功能方法语句为什么是this.prototype[name]?这样的话方法不都添加到了原型中去了吗?这样不会污染全局吗?