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(){
- // 验证邮箱
- return this
- });
但是这时候我们就不能直接使用了, 要通过 new 关键字来创建新的对象了.
- var m = new Methods();
- m.checkEmail().checkEmail()
两个疑惑: 1, 函数添加方法的功能方法语句为什么是 this[name], 为什么是这样写的?
2, 类式添加方法的功能方法语句为什么是 this.prototype[name]? 这样的话方法不都添加到了原型中去了吗? 这样不会污染全局吗?
来源: http://www.bubuko.com/infodetail-2646627.html