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操作Cookies包括(读取添加与删除)
Dec 26 Javascript
jQuery标签编辑插件Tagit使用指南
Apr 21 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
Sep 10 Javascript
整理Javascript函数学习笔记
Dec 01 Javascript
全面理解闭包机制
Jul 11 Javascript
微信小程序 视图容器组件的详解及实例代码
Jan 19 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 Javascript
canvas绘制爱心的几种方法总结(推荐)
Oct 31 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
Jul 19 Javascript
Vue 实现从小到大的横向滑动效果详解
Oct 16 Javascript
Js和VUE实现跑马灯效果
May 25 Javascript
JavaScript前端开发时数值运算的小技巧
Jul 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中的串行化变量和序列化对象
2006/09/05 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
python获取图片颜色信息的方法
2015/03/18 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
django使用html模板减少代码代码解析
2017/12/12 Python
Python延时操作实现方法示例
2018/08/14 Python
python把1变成01的步骤总结
2019/02/27 Python
Python整数对象实现原理详解
2019/07/01 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
python pygame实现球球大作战
2019/11/25 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
水果花束:Fruit Bouquets
2017/12/20 全球购物
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
资金申请报告范文
2015/05/14 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
教师培训学习心得体会
2016/01/21 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
分享Python获取本机IP地址的几种方法
2022/03/17 Python