通过说明与示例了解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 相关文章推荐
JS 面向对象之神奇的prototype
Feb 26 Javascript
jQuery源码分析-01总体架构分析
Nov 14 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
JS定时关闭窗口的实例
May 22 Javascript
javascript实现动态模态绑定grid过程代码
Sep 22 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
Jul 20 Javascript
jQuery实现的网格线绘制方法
Jun 20 Javascript
jQuery如何封装输入框插件
Aug 19 Javascript
JS一个简单的注册页面实例
Sep 05 Javascript
js时间转换毫秒的实例代码
Aug 21 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
Dec 09 Javascript
JavaScript多种滤镜算法实现代码实例
Dec 10 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生成缩略图的函数代码(修改版)
2011/01/18 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
php简单实现MVC
2015/02/05 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
Python写的英文字符大小写转换代码示例
2015/03/06 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
Python for循环中的陷阱详解
2018/07/13 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
大学毕业生工作的自我评价
2013/10/01 职场文书
个人自荐书怎么写
2015/03/26 职场文书
MySQL慢查询的坑
2021/04/28 MySQL
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技