通过说明与示例了解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 相关文章推荐
In Javascript Class, how to call the prototype method.(three method)
Jan 09 Javascript
JavaScript 通过模式匹配实现重载
Aug 12 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
Nov 19 Javascript
基于javascript实现文字无缝滚动效果
Mar 22 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
Oct 14 Javascript
脚本div实现拖放功能(两种)
Feb 13 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
Aug 17 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
Sep 17 Javascript
vue 解决异步数据更新问题
Oct 29 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
Jul 20 Javascript
js实现带有动画的返回顶部
Aug 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
很实用的一个完整email发送程序
2006/10/09 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
URL地址中的#符号使用说明
2011/02/12 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
python有证书的加密解密实现方法
2014/11/19 Python
全面解析Python的While循环语句的使用方法
2015/10/13 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
STP的判定过程
2012/10/01 面试题
接口可以包含哪些成员
2012/09/30 面试题
顶撞领导检讨书
2014/01/29 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
论文致谢词范文
2015/05/14 职场文书
追悼会悼词大全
2015/06/23 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
react中的DOM操作实现
2021/06/30 Javascript
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers