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 相关文章推荐
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
May 06 Javascript
js 判断上传文件大小及格式代码
Nov 13 Javascript
利用javascript数组长度循环数组内所有元素
Dec 27 Javascript
js 处理数组重复元素示例代码
Dec 27 Javascript
浅谈JavaScript实现面向对象中的类
Dec 09 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
Aug 03 Javascript
使用Node.js实现简易MVC框架的方法
Aug 07 Javascript
Angular4 ElementRef的应用
Feb 26 Javascript
微信小程序中网络请求缓存的解决方法
Dec 29 Javascript
JS面向对象实现飞机大战
Aug 26 Javascript
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 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
NO3第三帝国留言簿制作过程
2006/10/09 PHP
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
php 地区分类排序算法
2013/07/01 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
python+mysql实现简单的web程序
2014/09/11 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
Python os.access()用法实例
2019/02/18 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
Python编写万花尺图案实例
2021/01/03 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
什么是接口(Interface)?
2013/02/01 面试题
实习教师自我鉴定
2013/09/27 职场文书
给全校老师的建议书
2014/03/13 职场文书
合作意向协议书范本
2014/03/31 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
自考生自我评价
2019/06/21 职场文书
Go语言grpc和protobuf
2022/04/13 Golang