通过说明与示例了解js五种设计模式


Posted in Javascript onJune 17, 2019

第一种模式:js工厂模式

var lev=function(){ 
return "啊打"; 
}; 
function Parent(){ 
var Child = new Object(); 
Child.name="李小龙"; 
Child.age="30"; 
Child.lev=lev; 
return Child; 
}; 
var x = Parent(); 
alert(x.name); 
alert(x.lev());

说明:

1.在函数中定义对象,并定义对象的各种属性,,虽然属性可以为方法,但是建议将属性为方法的属性定义到函数之外,这样可以避免重复创建该方法

2.引用该对象的时候,这里使用的是 var x = Parent()而不是 var x = new Parent();因为后者会可能出现很多问题(前者也成为工厂经典方式,后者称之为混合工厂方式),不推荐使用new的方式使用该对象

3.在函数的最后返回该对象

4.不推荐使用这种方式创建对象,但应该了解

第二种模式:js构造函数模式

var lev=function(){ 
return "啊打"; 
}; 
function Parent(){ 
this.name="李小龙"; 
this.age="30"; 
this.lev=lev; 
}; 
var x =new Parent(); 
alert(x.name); 
alert(x.lev());

说明:

1.与工厂方式相比,使用构造函数方式创建对象,无需再函数内部重建创建对象,而使用this指代,并而函数无需明确return

2.同工厂模式一样,虽然属性的值可以为方法,扔建议将该方法定义在函数之外

3..同样的,不推荐使用这种方式创建对象,但仍需要了解

第三种模式:js原型模式

var lev=function(){ 
return "啊打"; 
}; 
function Parent(){ }; 
Parent.prototype.name="李小龙"; 
Parent.prototype.age="30"; 
Parent.prototype.lev=lev; 
var x =new Parent(); 
alert(x.name); 
alert(x.lev());

说明:

1.函数中不对属性进行定义

2.利用prototype属性对属性进行定义

3.同样的,不推荐使用这样方式创建对象

第四种模式:构造函数+原型的js混合的模式(推荐)

function Parent(){ 
this.name="李小龙"; 
this.age=32; 
};
Parent.prototype.lev=function(){ 
return this.name; 
};
var x =new Parent();
alert(x.lev());

说明:

1.该模式是指混合搭配使用构造函数方式和原型方式

2.将所有属性不是方法的属性定义在函数中(构造函数方式)
将所有属性值为方法的属性利用prototype在函数之外定义(原型方式)

3.推荐使用这样方式创建对象,这样做有好处和为什么不单独使用构造函数方式和原型方式,由于篇幅问题这里不予讨论

第五种模式:构造函数+原型的动态原型模式(推荐)

function Parent(){ 
this.name="李小龙"; 
this.age=32; 
if(typeof Parent._lev=="undefined"){ 
Parent.prototype.lev=function(){ 
return this.name; 
} 
Parent._lev=true; 
} 
}; 
var x =new Parent(); 
alert(x.lev());

说明:

1.动态原型方式可以理解为混合构造函数,原型方式的一个特例

2.该模式中,属性为方法的属性直接在函数中进行了定义,但是因为

if(typeof Parent._lev=="undefined"){
Parent._lev=true;
}

从而保证创建该对象的实例时,属性的方法不会被重复创建

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解析dom中的children对象数组元素firstChild,lastChild的使用
Jul 10 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
Aug 18 Javascript
jquery实现手风琴效果实例代码
Nov 15 Javascript
AngularJS中取消对HTML片段转义的方法例子
Jan 04 Javascript
简单实现JS倒计时效果
Dec 23 Javascript
微信小程序 实现点击添加移除class
Jun 12 Javascript
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
Node.js实现发送邮件功能
Nov 06 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
Jul 26 Javascript
JS图片懒加载的优点及实现原理
Jan 10 Javascript
使用node.JS中的url模块解析URL信息
Feb 06 Javascript
微信小程序中使用 async/await的方法实例分析
May 06 Javascript
简单了解vue.js数组的常用操作
Jun 17 #Javascript
送你43道JS面试题(收藏)
Jun 17 #Javascript
通过实例学习React中事件节流防抖
Jun 17 #Javascript
如何解决js函数防抖、节流出现的问题
Jun 17 #Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 #Javascript
通过js给网页加上水印背景实例
Jun 17 #Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
Jun 17 #Javascript
You might like
php+iframe 实现上传文件功能示例
2020/03/04 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
js中substring和substr的定义和用法
2014/05/05 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
PyQT实现多窗口切换
2018/04/20 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
小学毕业感言300字
2014/02/19 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
小学班级特色活动方案
2014/08/31 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
专项资金申请报告
2015/05/15 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
Python图片验证码降噪和8邻域降噪
2021/08/30 Python