JavaScript 笔记(8)- 创建对象2(组合模式、寄生模式、稳妥模式)

原创 乘风逐月 随笔 JavaScript 150阅读 2018-05-11 14:35:14 举报

一、组合使用构造函数模式和原型模式

创建自定义类型的常见方式,就是组合使用构造函数模式和原型模式。构造函数模式定义实例属性,原型模式定义方法和共享属性。结果就是,每个实例都有自己的实例属性副本,同时又共享方法和属性,最大限度的节省了内存。
例如:

二、动态原型模式

动态原型模式,将所有信息都封装在构造函数中,通过在构造函数中初始化原型(必要情况下),保持了同时使用构造函数和原型的优点。
例如:

上例通过检查 sayName() 是否存在,才修改原型。这里修改了原型会在所有实例中反应出来。使用这种方法时,不能重写原型,会切断实例与新原型之间的联系。

三、寄生构造函数模式

寄生构造函数模式的基本思想是:创建一个函数,该函数的作用是封装创建对象的代码,然后返回新对象。

这个例子除了使用了 new 操作符之外,和工厂模式是一样的。构造函数在不返回值的情况下,默认返回新对象实例(上例中没有return,则返回一个空对象)。而通过在构造函数末尾添加一个 return 语句,可以重写调用构造函数时的返回值。
这个模式可以在特殊情况下用来为对象创建构造函数。例如:

上例中返回的对象与构造函数或者与构造函数的原型属性之间没有关系,即这种模式返回的对象与在构造函数外面创建的对象没有什么不同。因此不能通过 instanceof 操作符来确定对象的类型。

四、稳妥构造函数模式

稳妥对象是指:没有公共属性,而其方法也不引用 this 的对象。稳妥对象最适合在一些安全环境中(这些环境中会禁止使用this和new),或者在防止数据被其他应用程序改动时使用。稳妥构造函数遵循与寄生构造函数类似的模式。但有两点不同:一是新创建对象的实例方法不引用 this;二是不使用new操作符调用构造函数。前面的例子可改写如下:

person 中保存的是一个稳妥的对象,除了调用 sayName() 方法,没有别的方法可以访问传入到构造函数中的原始数据。与寄生构造函数类似,使用稳妥模式创建的实例对象与构造函数之间没有联系。

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复