通过说明与示例了解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 相关文章推荐
setInterval 和 setTimeout会产生内存溢出
Feb 15 Javascript
使用js获取QueryString的方法小结
Feb 28 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
Oct 22 Javascript
提高jQuery性能的十个诀窍
Nov 14 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
Jan 19 Javascript
Three.js加载外部模型的教程详解
Nov 10 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
Aug 31 Javascript
vue项目持久化存储数据的实现代码
Oct 01 Javascript
vue权限问题的完美解决方案
May 08 Javascript
JS实现点餐自动选择框(案例分析)
Dec 10 Javascript
Nuxt页面级缓存的实现
Mar 09 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之第十天
2006/10/09 PHP
数字转英文
2006/12/06 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
深入解析nodejs HTTP服务
2017/07/25 NodeJs
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python读写csv文件实例代码
2019/07/05 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
jupyter 添加不同内核的操作
2021/02/06 Python
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
小学生成长感言
2014/01/30 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python