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 相关文章推荐
Jquery选择器 $实现原理
Dec 02 Javascript
jQuery Flash/MP3/Video多媒体插件
Jan 18 Javascript
关于jQuery判断元素是否存在的问题示例探讨
Jul 21 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
AngularJS+Node.js实现在线聊天室
Aug 28 Javascript
javascript 四十条常用技巧大全
Sep 09 Javascript
Bootstrap源码解读下拉菜单(4)
Dec 23 Javascript
canvas实现探照灯效果
Feb 07 Javascript
微信小程序中用WebStorm使用LESS
Mar 08 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
Jan 09 Javascript
微信小程序开发之tabbar图标和颜色的实现
Oct 17 Javascript
vue项目首屏加载时间优化实战
Apr 23 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 组件化编程技巧
2009/06/06 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
一些常用的Javascript函数
2006/12/22 Javascript
Javascript 解疑
2009/11/11 Javascript
javascript options属性集合操作代码
2009/12/28 Javascript
js replace正则表达式应用案例讲解
2013/01/17 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Django中使用group_by的方法
2015/05/26 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
python中sys.argv函数精简概括
2018/07/08 Python
浅述python中深浅拷贝原理
2018/09/18 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
python简单实现AES加密和解密
2019/03/28 Python
简单介绍django提供的加密算法
2019/12/18 Python
python GUI模拟实现计算器
2020/06/22 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
军训自我鉴定范文
2014/02/13 职场文书
班训口号大全
2014/06/18 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
故宫的导游词
2015/01/31 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
埃及王子观后感
2015/06/16 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers