阅读《JavaScript设计模式》第一章心得
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]?这样的话方法不都添加到了原型中去了吗?这样不会污染全局吗?
最新文章
- iOS从零开始学习直播之2.采集
- python-socket模块
- 使用wex5得到的一些教训
- python(30) 获取网页返回的状态码,状态码对应问题查询
- 【mysql】关于IO/内存方面的一些优化
- 18 多线程编程 - 《Python 核心编程》
- linux内核神级list
- quartz 数据表字典
- asp数据链接
- 一个简单的Makefile的编写【用自己的话,解释清楚这些】
- php精粹-编写高效的php代码 --- php设计模式
- 编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件
- Android4.0设置接口变更摘要(四)
- [Usaco2007 Dec]Building Roads 修建道路[最小生成树]
- Windows下快速安装Xgboost(无需Git或者VS)
- udp服务端收发数据流程
- crontab学习
- 【Android】ImageMap,图片地图
- SD341X-SD343H蜗轮传动伸缩蝶阀厂家,SD341X-SD343H蜗轮传动伸缩蝶阀价格 - 专题栏目 - 无极资讯网
- 【转】 The user specified as a definer ('root'@'') does not exist when using LOCK TALBE
热门文章
- JavaScript Patterns 2.3 For loops
- YTU 2750: 猜算式
- TensorFlow alexnet在华为Mate10上运行方法
- KVO中你所不知道的";坑";
- 44. Ext信息提示对话框
- Vue导航守卫beforeRouteEnter,beforeRouteUpdate,beforeRouteLeave详解
- JavaScript--改变 HTML 样式
- Horspool和BM算法解析
- android 虚拟机,文件导入sdcard下报错,Read-only file system
- html基础代码演示2