Javascript面向对象编程 -- 设计模式
写在前面:
之前的文章都是写构造函数,原型之类的。但是我们都知道原型最大的优点也是缺点就是共享。也是我们最头疼的问题.
据共享的缘故,导致很多开发者放弃使用原型,因为每次实例化出的数据需要保留自己的特性,而不能共享。
组合构造函数+原型模式
解决构造传参和共享问题,可以组合构造函数+原型模式
function Box(name, age) { //不共享的使用构造函数 this.name = name; this.age = age; this.fruits = ['apple', 'banana', 'orange']; }; Box.prototype = { //共享的使用原型模式 constructor: Box, //强制指向Box run: function() { return this.name + this.age + this.fruits; } }
PS:这种模式也是最常见也是最常用的模式,这种混合模式很好的解决了传参和引用共享的大难题。 是创建对象比较好的方法。
动态原型模式
原型模式, 不管你是否调用了原型中的共享方法, 它都会初始化原型中的方法, 并且在
声明一个对象时, 构造函数+原型部分让人感觉又很怪异, 最好就是把构造函数和原型封装
到一起。为了解决这个问题,我们可以使用动态原型模式
动态原型模式:
function Box(name ,age) { //将所有信息封装到函数体内 this.name = name; this.age = age; if (typeof this.run != 'function') { //仅在第一次调用的初始化 Box.prototype.run= function() { return this.name; }; } } var box = newBox('Lee', 3); alert(box.run())
第一次调用构造函数时, run()方法发现不存在,然后初始化原型。当第二次调用,就不会初始化, 并且第二次创建新对象, 原型也不会再初始化了。 这样及得到了封装, 又实现了原型方法共享,并且属性都保持独立.
注意:使用动态原型模式,千万不能使用字面量的方式重写原型,因为它会切断实例与新原型之间的联系!!!
这是Javascript OOP里面的其中两种设计模式,下一篇文章会讲寄生构造函数模式和稳妥构造函数模式。
还有最头疼的继承!
相关推荐
zhongshish 2020-10-21
jinfeng0 2020-08-03
uileader 2020-07-18
jameszgw 2020-06-21
yanglin 2020-05-02
钟鼎 2020-05-01
嵌入式移动开发 2020-04-10
THEEYE 2020-03-26
嵌入式移动开发 2020-01-23
gougouzhang 2020-01-12
TingBen 2019-12-29
chvnetcom 2020-01-06
Mrwind 2019-11-03
chvnetcom 2019-10-29
baohuanlove 2019-08-16
nongshuqiner 2015-07-27
anqier 2019-07-01
titans 2017-06-03
THEEYE 2016-12-22