前言
- 博主趁双12买了本javascript设计模式,为了使自己加紧看完,一共有40章节,每天2章,20天搞定。
- 个人觉得这个书还挺有意思。
第一章 灵活的语言 Javascript
- 第一部分,主要是说别挂太多全局变量,有以下几个解决办法:
- 一、使用对象把各种方法包起来
- 二、使用函数返回各种方法(不推荐函数把函数包起来,书上解释是实例化无法获得)
- 三、使用类的写法(就是函数里面在this里挂方法)
- 四、由于类需要实例化,作者认为不便,所以把方法直接挂函数原型对象上。
- tips,解决多次使用调用方法不便的问题,采用return this进行链式调用。
- 五、由于原型上加方法会污染原型,作者使用原型上挂抽象类的方式:
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()
第二章 写的都是看到的——面向对象编程
- 主要讲了ES5的类的写法,静态方法,原型链方法,私有属性方法,特权方法(我第一次听这叫法)。
var Book = function(id,name,price){
var num =1
function checkID(){}
this.getName= function(){}
this.id = id
this.copy=function(){}
this.setName(name)
}
Book.isChinese =true
Book.RESETime=function(){}
Book.prototype={
isJSbook:false
display:function(){}
}
- 作者的意思貌似是说特权方法可以访问类的属性,权力比较大,所以叫这名字,当然定义为公有方法,构造器什么的也算是特权方法。
- 后面一个例子是使用自执行函数把Book做成闭包返回出来。
- 然后是安全模式,其实就是加一个是否是实例的判断,防止没用new调用把属性挂到全局上。
- 后面是讲类的继承,先说了原型链继承,单用原型链继承会让父类的特权属性变成每一个实例上共有属性(因为书中用的原型链继承是把子类原型对象指向父类实例,父类实例的生成会调用call使得实例里有父类属性,所有子类实例通过原型链即可找到属性),所以子类还需要使用call(对象冒充),这样就会使得子类调用了一遍父类特权属性方法,在new一个子类实例时候,实际是把特权属性方法直接挂在子类实例上,不需要去拿原型链的了。
- 另外说了原型式继承,寄生式继承,说是道格拉斯发的文章里写的,实际就是造个Function的原型对象充当子类原型对象,再去链接父类原型对象,这个模式当然包括Object.create做的对象来充当子类原型对象。
function inherit(o){
function F(){}
F.prototype=o
return new F
}
- 后面说多继承,其实就是深复制,没啥说头。
- 然后是多态,同一个方法多种调用方式。简单说就是在函数里判断参数或者条件,然后执行函数里包含的各种函数。
总结
- 一二两章没说啥东西,总的来说就是复习基础了,收获也不大,毕竟后面38章才是说设计模式精髓。