关于为什么使用设计模式的原因
1.可维护性
2.沟通
3.性能
注意:未搞懂设计模式的用途就盲目套用,是一种不安全的做法。
关于弱类型语言
javascript中又3中原始类型:
1.布尔型
2.数值型
3.字符串类型
此外,还有对象类型和包含可执行代码的函数类型,和空类型(null)和未定义类型(undefined).
类型之间的转换方式有如下几种:
1.toString可以将数值或者布尔值转变为字符串
2.parseFloat和parseInt可以将字符串转变为数值
3.双重“非”操作可以将字符串或者数值变为布尔值
var bool = !!num;
在javascript中,除了三种原始数据类型,一切都是对象(在必要的时候也会被自动包装成对象)。
创建对象的基本模式
1.门户大开型
用传统方式创建一个类,用一个函数来做其构造器。其所有方法和属性都是公开的,可以访问的。这些公用属性需要用this关键字来创建。
2.命名规范区别私用成员
这种方法与门户大开型如出一辙,只是在一些方法和属性的名称前面加了下划线而已,以示其私用性。
3.闭包实现私用成员
三种方法的利弊:闭包实现私用成员,可以实现真正的私用,但是每一个都会生成新的副本,导致暂用内存过多,所以只适用于在需要真正的私用属性或方法中。此外,用闭包实现私用成员导致派生问题被称为“继承破坏封装”。
继承
1.原型式继承
2.类式继承
3.掺元类
在类间差异较小的类层次体系中,内存效率比较重要的场合原型式继承是最佳选择,只熟悉其他面向对象语言的继承机制的程序员最好选用类式继承。差异较大的情况下,采用掺元类中的方法来扩充这些类往往是一种更合理的选择。
clone函数
function clone(object){
function F(){}
F.prototype = object;
return new F;
}
其工作原理如下:
clone函数首先创建了一个新的空函数F,然后将F的prototype属性设置作为参数object传入的原型对象。
单体
简单的单体实际上就是对象字面量,它把一批有一定关联的方法和属性组织在一起,如果它可以被实例化,那么它只能被实例化一次。(需要保护的变量可以放在闭包中)
关于链式调用
Function.prototype.method用于为类添加新方法。
Function.prototype.method = function(name, fn){
this.prototype[name] = fn;
};
如果想要让其能够链式调用。我们需要让其返回this值,即可实现此功能。
Function.prototype.method = function(name, fn){
this.prototype[name] = fn;
return this;
};
关于接口
利与弊
利:
1.既定的接口具有自我描述性,可以促进代码的重用。
2.接口可以告诉程序员一个类实现了哪些方法。
3.在大型项目中尤其有用。
4.利于测试和调试
弊:
1.会对性能造成影响,主要归咎于额外的方法调用开销
2.必须手动保证某个类实现了一个接口
在javascript中模仿接口
1.用注释描述接口
这种方法最简单,但是效果最差。示例如下:
[code lang=”js”]
/*
interface Composite{
function add(child);
function remove(child);
function getChild(index);
}
interface FormItem{
function save();
}
*/
var CompositeForm = function(id, method, action){ //implements Composite, FormItem
…
};
//Implements the Composite interface
CompositeForm.prototype.add = function(child){
…
};
CompositeForm.prototype.remove = function(child){
…
};
CompositeForm.prototype.getChild = function(index){
…
};
//Implement the FormItem interface.
CompositeForm.prototype.save = function(){
…
};
[/code]
2.用属性检查模仿接口
3.用鸭式辨型模仿接口
关于闭包
闭包(closure)是一个受保护的变量空间,由内嵌函数生成。其主要用途是用来创建类的私用(private)变量。
关于自省
自省的概念:你可以在运行时检查对象所具有的属性和方法,还可以使用这种信息动态实例化类和执行其方法(这种技术称为反射)。