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 相关文章推荐
ECMAScript 基础知识
Jun 29 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
Jun 21 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
Aug 02 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
Sep 14 Javascript
Javascript实现滑块滑动改变值的实现代码
Apr 12 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
Apr 28 Javascript
javascript结合ajax读取txt文件内容
Dec 05 Javascript
javascript操作数组详解
Dec 17 Javascript
node.js解决获取图片真实文件类型的问题
Dec 20 Javascript
js输出数据精确到小数点后n位代码
Jul 02 Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 Javascript
js实现弹窗居中的简单实例
Oct 09 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 配置文件中open_basedir选项作用
2009/07/19 PHP
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
python基础教程项目三之万能的XML
2018/04/02 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
计算机售后服务承诺书
2014/05/30 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
交通事故和解协议书
2015/01/27 职场文书
检讨书模板
2015/01/29 职场文书
员工福利申请报告
2015/05/15 职场文书
中学教师教学工作总结
2015/08/13 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers