javascript设计模式 ? 原型模式原理与应用实例分析


Posted in Javascript onApril 10, 2020

本文实例讲述了javascript设计模式 ? 原型模式原理与应用。分享给大家供大家参考,具体如下:

介绍:在日常的开发过程中,我们经常会利用到前端模板引擎来做页面渲染,因为存在很多页面结构相同,内容不同的场景。这种场景在js层面也会遇到,

很多组件存在相同或者类似,重复的创建会导致系统的消耗,这就要用到原型模式了。将相似内容提取出来作为原型类,创建具体类时需要对原型类进行复制然后扩展。

需要注意的是,复制出来的对象在进行修改时不会影响到原型类,二者相互独立。

定义:使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。

场景:我们还是基于Dialog类来实现原型模式,我将所有弹窗共有的属性方法抽取出来,每次创建时通过复制其基础属性,在此基础上进行完善,然后返回新的对象。

示例:

var Dialog = function(){
 this.init = function(arg){
 this.element = arg.element;
 this.name = arg.name;
 }
 this.show = function(){
 console.log(this.name + ' is show -> ' + this.element);
 }
};
var createDialog = function(arg){
 var _dialog = function(){};
 _dialog.prototype = new Dialog();
 
 var resDia = new _dialog();
 resDia.init(arg);
 return resDia;
 
}
var notice = createDialog({name:'notice',element:'<div>notice</div>'});
var toast = createDialog({name:'toast',element:'<div>toast</div>'});
var warnin = createDialog({name:'warnin',element:'<div>warnin</div>'});
 
notice.show(); //notice is show -> <div>notice</div>
toast.show(); //toast is show -> <div>toast</div>
warnin.show(); //warnin is show -> <div>warnin</div>

原型模式总结:

优点:
* 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率。
* 扩展性较好

缺点:
* 对已有类进行改造时需要修改源代码,违背了开关原则。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
更优雅的事件触发兼容
Oct 24 Javascript
JavaScript返回网页中超链接数量的方法
Apr 03 Javascript
JS实现CheckBox复选框全选全不选功能
May 06 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
Apr 14 Javascript
基于JavaScript实现弹幕特效
Aug 27 Javascript
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 Javascript
vuex如何重置所有state(可定制)
Jan 17 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
vue实现多级菜单效果
Oct 19 Javascript
详解微信小程序中var、let、const用法与区别
Jan 11 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
Jun 24 jQuery
vue+elementUI中表格高亮或字体颜色改变操作
Nov 02 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
Apr 09 #Javascript
vue中的过滤器及其时间格式化问题
Apr 09 #Javascript
微信小程序保存图片到相册权限设置
Apr 09 #Javascript
微信小程序仿通讯录功能
Apr 09 #Javascript
vue cli4下环境变量和模式示例详解
Apr 09 #Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
Apr 09 #Javascript
微信小程序吸底区域适配iPhoneX的实现
Apr 09 #Javascript
You might like
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
php递归创建目录的方法
2015/02/02 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
javascript 日期常用的方法
2009/11/11 Javascript
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
jQuery技巧总结
2011/01/01 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
Python入门篇之数字
2014/10/20 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
python set内置函数的具体使用
2019/07/02 Python
什么是makefile? 如何编写makefile?
2013/01/02 面试题
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
记帐员岗位责任制
2014/02/08 职场文书
大学生就业策划书范文
2014/04/04 职场文书
初中生活随笔
2015/08/15 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书