博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript面向对象编程 -- 设计模式
阅读量:6476 次
发布时间:2019-06-23

本文共 1084 字,大约阅读时间需要 3 分钟。

写在前面:

之前的文章都是写构造函数,原型之类的。但是我们都知道原型最大的优点也是缺点就是共享。也是我们最头疼的问题.

据共享的缘故,导致很多开发者放弃使用原型,因为每次实例化出的数据需要保留自己的特性,而不能共享。

组合构造函数+原型模式

解决构造传参和共享问题,可以组合构造函数+原型模式

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里面的其中两种设计模式,下一篇文章会讲寄生构造函数模式和稳妥构造函数模式。

还有最头疼的继承!

转载地址:http://vxmko.baihongyu.com/

你可能感兴趣的文章
caffe solver
查看>>
Rhel6-heartbeat+lvs配置文档
查看>>
[CF340D]Bubble Sort Graph/[JZOJ3485]独立集
查看>>
ORACLE分科目统计每科前三名的学生的语句
查看>>
第一次冲刺--查看活动详情用户场景分析
查看>>
0317复利计算的回顾与总结
查看>>
函数对象
查看>>
Sharepoint学习笔记—习题系列--70-573习题解析 -(Q70-Q72)
查看>>
最全最新个税计算公式---今天你税了吗?
查看>>
linux shell 正则表达式(BREs,EREs,PREs)差异比较(转,当作资料查)
查看>>
MongoDB--CSharp Driver Quickstart .
查看>>
#pragma mark 添加分割线 及 其它类似标记 - 转
查看>>
遗传算法实现自动组卷、随机抽题 (转)
查看>>
二分法求平方根(Python实现)
查看>>
使用startActivityForResult方法(转)
查看>>
so在genymotation中错误问题
查看>>
Visual Studio 原生开发的10个调试技巧(二)
查看>>
Windows内核再次出现0Day漏洞 影响win2000到win10所有版本 反病毒软件恐成瞎子
查看>>
H3C品牌刀片系统强势首发
查看>>
激励着我前进
查看>>