通过说明与示例了解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 相关文章推荐
JQuery AJAX实现目录浏览与编辑的代码
Oct 21 Javascript
jQuery拖拽div实现思路
Feb 19 Javascript
Angularjs制作简单的路由功能demo
Apr 14 Javascript
window.location.reload 刷新使用分析(去对话框)
Nov 11 Javascript
AngularJS控制器详解及示例代码
Aug 16 Javascript
js绘制购物车抛物线动画
Nov 18 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
Vue路由跳转问题记录详解
Jun 15 Javascript
详解webpack性能优化——DLL
Oct 20 Javascript
node实现的爬虫功能示例
May 04 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
JS实现点击掉落特效
Jan 29 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
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
python操作xml文件详细介绍
2014/06/09 Python
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
python银行系统实现源码
2019/10/25 Python
英国电信商店:BT Shop
2019/12/17 全球购物
应届生求职自荐信
2014/07/04 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
小学推普周活动总结
2015/05/07 职场文书
《检阅》教学反思
2016/02/22 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL