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 字符编码规则
May 04 Javascript
Javascript编程之继承实例汇总
Nov 28 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
Jan 13 Javascript
创建一个类Person的简单实例
May 17 Javascript
JS中的进制转换以及作用
Jun 26 Javascript
node.js爬虫爬取拉勾网职位信息
Mar 14 Javascript
vue实现全选、反选功能
Nov 17 Javascript
Vue源码学习之初始化模块init.js解析
Nov 02 Javascript
Bootstrap实现下拉菜单多级联动
Nov 23 Javascript
浅析node.js的模块加载机制
May 25 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
Dec 09 Javascript
JS实现简单的九宫格抽奖
Jun 28 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
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python实现telnet服务器的方法
2015/07/10 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
python画折线图的程序
2018/07/26 Python
Python 获取div标签中的文字实例
2018/12/20 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
Django REST framwork的权限验证实例
2020/04/02 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
英国电器零售商:PRC Direct
2018/06/21 全球购物
教师年度考核自我鉴定
2014/01/19 职场文书
运动会通讯稿100字
2014/01/31 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫