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 键盘keyCode键码值表
Dec 24 Javascript
javascript限制文本框输入值类型的方法
May 07 Javascript
javascript删除元素节点removeChild()用法实例
May 26 Javascript
javascript日期处理函数,性能优化批处理
Sep 06 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
Nov 09 Javascript
基于JS实现的笛卡尔乘积之商品发布
May 13 Javascript
详解angularjs利用ui-route异步加载组件
May 21 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
详解js类型判断
May 22 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
Sep 20 jQuery
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
Vue动态路由缓存不相互影响的解决办法
Feb 19 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/10/09 PHP
PHP 已经成熟
2006/12/04 PHP
基于simple_html_dom的使用小结
2013/07/01 PHP
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
JQuery 弹出框定位实现方法
2010/12/02 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
pandas数值计算与排序方法
2018/04/12 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
Python3离线安装Requests模块问题
2019/10/13 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
北京SQL新华信咨询
2016/09/30 面试题
前台文员个人求职信范文
2014/01/05 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
学员自我鉴定
2014/03/19 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
环保项目建议书
2014/08/26 职场文书
校长四风对照检查材料
2014/09/27 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
小学班主任教育随笔
2015/08/15 职场文书