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 相关文章推荐
番茄的表单验证类代码修改版
Jul 18 Javascript
判断文档离浏览器顶部的距离的方法
Jan 08 Javascript
jQuery中prev()方法用法实例
Jan 08 Javascript
js淡入淡出焦点图幻灯片效果代码分享
Sep 08 Javascript
javascript中eval和with用法实例总结
Nov 30 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
Mar 19 Javascript
如何利用Promises编写更优雅的JavaScript代码
May 17 Javascript
js对象浅拷贝和深拷贝详解
Sep 05 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
Jul 13 Javascript
教你5分钟学会用requirejs(必看篇)
Jul 25 Javascript
es6数值的扩展方法
Mar 11 Javascript
基于vue实现圆形菜单栏组件
Jul 05 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/09/29 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
js+css实现打字效果
2020/06/24 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python中字符串内置函数的用法总结
2018/09/13 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
python 写一个性能测试工具(一)
2020/10/24 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
2014学雷锋活动总结
2014/03/09 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
小石潭记导游词
2015/02/03 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
python中的plt.cm.Paired用法说明
2021/05/31 Python
MySQL系列之二 多实例配置
2021/07/02 MySQL
asyncio异步编程之Task对象详解
2022/03/13 Python
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers