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 相关文章推荐
HTML中不支持静态Expando的元素的问题
Mar 08 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
Dec 15 Javascript
JQuery选择器绑定事件及修改内容的方法
Jan 23 Javascript
js实现点击左右按钮轮播图片效果实例
Jan 29 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
理解javascript异步编程
Jan 27 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
Jun 24 Javascript
将angular-ui的分页组件封装成指令的方法详解
May 10 Javascript
Angularjs 1.3 中的$parse实例代码
Sep 14 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
Sep 25 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
Feb 12 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使用qr生成二维码的示例分享
2014/01/20 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
PHP简单创建压缩图的方法
2016/08/24 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
javascript闭包的理解和实例
2010/08/12 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
学习vue.js中class与style绑定
2016/12/03 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
详解webpack 入门与解析
2018/04/09 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
用Python实现KNN分类算法
2017/12/22 Python
python使用代理ip访问网站的实例
2018/05/07 Python
使用python接入微信聊天机器人
2020/03/31 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python retrying模块的使用方法详解
2019/09/25 Python
浅析PEP572: 海象运算符
2019/10/15 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
2014最新实习证明模板
2014/10/02 职场文书
论文答谢词
2015/01/20 职场文书
离婚代理词范文
2015/05/23 职场文书
2015选调生工作总结
2015/07/24 职场文书
诚实守信主题班会
2015/08/13 职场文书
《打电话》教学反思
2016/02/22 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers