var Car = {
getModel: function() {
console.log("The firstname of this car is " + this.firstname);
}
}
// Object.creat允许我们使用第二个参数来初始化Civic对象的属性
var Civic = Object.create(Car, {
'id': {
value: 0,
enumerable: true
},
'firstname': {
value: 'Honda',
enumeable: true
}
});
Civic.getModel(); // The firstname of this car is Honda
设计模式
设计模式(Design pattern)是一套被反复使用、思想成熟、经过分类和长期实战设计经验总结的。 使用设计模式是为了让代码可重用、可扩展、可解耦、更容易被人理解且能保证代码可靠性。设计模式使代码开发真正工程化。
设计原则
设计模式存在根本原因是为了代码复用,增加可维护性。有如下原则:
构造器模式 - Constructor Pattern
Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。 在JavaScript中,几乎所有的东西都是对象,我们通常最感兴趣的是object构造器。
带原型的Constructor
使用构造函数,然后通过new的方式创建基于构造函数的新实例;实例们共享的方法存放在构造函数的原型上。
模块模式 - Module Pattern
模块模式能够帮助我们清晰地分离和组织项目中的单元代码。 模块模式最初被定义为在传统软件工程中为类提供私有和公有的封装方法。 该模式除了返回一个对象而不是一个函数之外,非常类似于一个立即调用的函数表达式。
通过创建自包含来实现Module Pattern。
引入混入
将全局变量作为参数传递给模块的匿名函数。
单例模式 - Singleton Pattern
单例模式限制了类的实例化只有一次。 在JavaScript中,Singleton充当共享资源命名空间,从全局命名空间中隔离出代码实现,从而为函数提供单一访问点。
通过Singleton模式创建的实例指向同一个位置。
观察者模式 - Observer Pattern
观察者模式:一个对象(Subject)维持一系列依赖于它的对象(Observer),将目标对象(Subject)有关状态的任何变更自动通知(
Subject.Notify()
)给观察者(Observer),而观察者根据通知执行相应的更新(Observer.Update()
)示例
发布/订阅模式 - Publish/Subscribe Pattern
Publish/Subscribe 模式使用了一个主题/事件通道,这个通道介于希望接收到通知(订阅者)的对象和激活事件的对象(发布者)之间。
通过订阅另一个对象的特定任务或活动,当任务或活动发生时获得通知,而不是单个对象直接调用其他对象的方法。
原型模式 - Prototype Pattern
原型模式是一种基于现有对象模板,通过克隆方式创建对象的模式。 Prototype模式是基于原型继承的模式,可以在其中创建对象,作为其他对象的原型。
性能提升:所有通过
Object.create()
生成的对象,它们继承的函数方法都指向父类中的此函数,而不是创建它们自己的单份拷贝。Object.create()
工厂模式 - Factory Pattern
工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型(抽象工程)。
Factory可以通过一个通用的接口来创建对象,我们可以指定所创建的工厂对象的类型。
何时使用Factory
何时不应使用Factory
除非为创建对象提供一个接口是我们编写库的设计目标,否则建议使用显示构造函数,以避免不必要的开销。
抽象工厂