通过说明与示例了解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 相关文章推荐
javascript常用对话框小集
Sep 13 Javascript
JavaScript学习笔记之Function对象
Jan 22 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
Apr 29 Javascript
JS模拟键盘打字效果的方法
Aug 05 Javascript
一道JS前端闭包面试题解析
Dec 25 Javascript
jQuery插件实现文字无缝向上滚动效果代码
Feb 25 Javascript
微信JS-SDK选取手机照片上传功能
Apr 21 Javascript
Angularjs自定义指令Directive详解
May 27 Javascript
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 Javascript
vue数组对象排序的实现代码
Jun 20 Javascript
TypeScript高级用法的知识点汇总
Dec 17 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
简单了解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/04/22 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
村支部书记群众路线对照检查材料思想汇报
2014/10/08 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
行政经理岗位职责
2015/04/15 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python