javascript工厂模式和构造函数模式创建对象方法解析


Posted in Javascript onDecember 30, 2016

工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现)。考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节,如下面的例子所示。

function createPerson(name, age, job){
 var o = new Object();
 o.name = name;
 o.age = age;
 o.job = job;
 o.sayName = function(){
 alert(this.name);
 };
 return o;
}
var person1 = createPerson("Nicholas", 29, "Software Engineer");
var person2 = createPerson("Greg", 27, "Doctor");

函数createPerson()能够根据接受的参数来构建一个包含所有必要信息的Person 对象。可以无数次地调用这个函数,而每次它都会返回一个包含三个属性一个方法的对象。工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。随着JavaScript的发展,又一个新模式出现了。

二、构造函数模式

像Object 和Array 这样的原生构造函数,在运行时会自动出现在执行环境中。此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。例如,可以使用构造函数模式将前面的例子重写如下。

function Person(name, age, job){
 this.name = name;
 this.age = age;
 this.job = job;
 this.sayName = function(){
 alert(this.name);
 };
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

在这个例子中,Person()函数取代了createPerson()函数。我们注意到,Person()中的代码除了与createPerson()中相同的部分外,还存在以下不同之处:

  • 没有显式地创建对象;
  • 直接将属性和方法赋给了this 对象;
  • 没有return 语句。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
使用Modello编写JavaScript类
Dec 22 Javascript
JavaScript DOM学习第六章 表单实例
Feb 19 Javascript
JavaScript DOM学习第八章 表单错误提示
Feb 19 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
Dec 27 Javascript
div模拟选择框示例代码
Nov 03 Javascript
Javascript判断文件是否存在(客户端/服务器端)
Sep 16 Javascript
浅谈Javascript数组的使用
Jul 29 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
Nov 27 Javascript
javascript设计模式--策略模式之输入验证
Nov 27 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
Nov 14 jQuery
浅谈Vue网络请求之interceptors实际应用
Feb 28 Javascript
javascript实现京东登录显示隐藏密码
Aug 02 Javascript
ajax图片上传,图片异步上传,更新实例
Dec 30 #Javascript
浅谈JavaScript的函数及作用域
Dec 30 #Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 #Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 #Javascript
浅谈js script标签中的预解析
Dec 30 #Javascript
jQuery实现页面顶部下拉广告
Dec 30 #Javascript
jQuery Password Validation密码验证
Dec 30 #Javascript
You might like
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
php和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
jquery tools系列 expose 学习
2009/09/06 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
详解Python3中yield生成器的用法
2015/08/20 Python
python类的继承实例详解
2017/03/30 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python虚拟环境迁移方法
2019/01/03 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
护理学毕业生求职信
2013/11/14 职场文书
社区国庆节活动方案
2014/02/05 职场文书
《记承天寺夜游》教学反思
2014/02/16 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android