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 相关文章推荐
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
Aug 15 Javascript
js判断变量初始化的三种形式及推荐用的形式
Jul 22 Javascript
最新最热最实用的15个jQuery插件汇总
Jul 05 Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 Javascript
AngularJS 入门教程之事件处理器详解
Aug 19 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
Jan 23 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
Feb 05 Javascript
微信小程序基于本地缓存实现点赞功能的方法
Dec 18 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
JS前端广告拦截实现原理解析
Feb 17 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 Javascript
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
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
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python序列操作之进阶篇
2016/12/08 Python
Python操作json的方法实例分析
2018/12/06 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
pip安装python库的方法总结
2019/08/02 Python
python 修改本地网络配置的方法
2019/08/14 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
python处理document文档保留原样式
2019/09/23 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
中层干部岗位职责
2013/12/18 职场文书
个人函授自我鉴定
2014/03/25 职场文书
大学生求职信例文
2014/06/29 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
中标通知书格式
2015/04/17 职场文书
加班费申请报告
2015/05/15 职场文书
社区安全温馨提示语
2015/07/14 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
只用Python就可以制作的简单词云
2021/06/07 Python
英镑符号 £
2022/02/17 杂记