《javascript设计模式》学习笔记

/ 0评 / 0

关于为什么使用设计模式的原因

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)变量。

关于自省

自省的概念:你可以在运行时检查对象所具有的属性和方法,还可以使用这种信息动态实例化类和执行其方法(这种技术称为反射)。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注