通过说明与示例了解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 相关文章推荐
一段效率很高的for循环语句使用方法
Aug 13 Javascript
基于jquery的一个简单的脚本验证插件
Apr 05 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
Sep 10 Javascript
html+js实现动态显示本地时间
Sep 21 Javascript
jQuery操作input值的各种方法总结
Nov 21 Javascript
最实用的jQuery分页插件
Oct 09 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
Dec 08 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
Oct 25 Javascript
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
JS函数节流和防抖之间的区分和实现详解
Jan 11 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
Oct 31 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边学边教》(01.开篇――准备工作)
2006/12/13 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
js排序与重组的实例讲解
2017/08/28 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
vue2.0 路由模式mode="history"的作用
2018/10/18 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
在Python中使用swapCase()方法转换大小写的教程
2015/05/20 Python
python表格存取的方法
2018/03/07 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
破解安装Pycharm的方法
2018/10/19 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
JMS中Topic和Queue有什么区别
2013/05/15 面试题
大专应届生个人的自我评价
2013/11/21 职场文书
给交警的表扬信
2014/01/12 职场文书
交通事故检查书范文
2014/01/30 职场文书
会计岗位职责
2015/02/03 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电