javascript设计模式之对象工厂函数与构造函数详解


Posted in Javascript onJuly 30, 2015

下面通过文字详解加代码分析的方式给大家分享下javascript设计模式之对象工厂函数与构造函数的相关知识。

概述使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法。然而,除了这两种常用的对象创建方式,JavaScript还提供了其他方法创建对象。1).使用工厂函数创建对象我们可以编写一个函数,此函数的功能就是创建对象,可将其.

概述

使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法。
然而,除了这两种常用的对象创建方式,JavaScript还提供了其他方法创建对象。
1).使用工厂函数创建对象

我们可以编写一个函数,此函数的功能就是创建对象,可将其称为“对象工厂方法”。

//工厂函数     

 function createPerson(name, age, job) {         

 var o = new Object();         

 o.name = name;         

 o.age = age;         

 o.job = job;         

 o.sayName = function () {             

 console.info(this.name);         

 };         

 return o;      } //使用工厂函数创建对象     

 var person1 = createPerson('张三', 29, '软件工程师');     

 var person2 = createPerson('李四', 40, '医生');

2).定义对象构造函数

  a).对象构造函数首字母大写
  b).内部使用this关键字给对象添加成员
  c).使用new关键字调用对象构造函数

//定义对象“构造”函数      

function Person(name, age, job) { 

this.name = name;         

 this.age = age;          

this.job = job;          

this.sayName = function () {            
  console.info(this.name);          

};      

} //使用new调用对象构造函数创建对象     

 var p1 = new Person('张三', 29, '软件工程师');     
var p2 = new Person('李四', 40, '医生');

以普通方式调用的“构造函数”

构造函数其实也是一个函数,不同之处在于调用它时必须要加一个“new”关键字,如果不加这个关键字,则对它的调用被认为是普通函数调用。

 //作为普通函数调用的构造函数,通过this添加的属性,

//成为了window对象的属性与方法。

console.info(window.name);//张三

console.info(window.age); //29

console.info(window.job); //软件工程师

对象构造函数长得这个样:

function Person (name) {

this.name = name;

 this.say = function () {

 return "I am " + this.name;

  };

}

实际上是这样(示意):

function Person (name) {

// var this = {};

 this.name = name;

 this.say = function () {

return "I am " + this.name;

 };

    // return this;

}

构造函数完成的工作

1. 创建一个新的对象
2. 让构造函数的this引用这一新创建的对象
3. 执行构造函数中的代码,这些代码通常完成向新对象添加属性的工作
4. 向外界返回新创建的对象引用。
对象构造函数与对象工厂方法的区别

1. 对象构造函数中没有显式的对象创建代码
2. 新对象应具备的属性与方法是通过this引用添加的.
3. 对象构造函数中没有return语句
 通常会把对象构造函数的首字母设置为大写的,以区别于普通函数。
对象的constructor属性

a).使用对象工厂函数创建对象,每个对象的constructor属性引用Object()

 

var person = createPerson('张三', 29, '软件工程师');

 //使用工厂方法创建对象,
其constructor属性引用Object()函数

console.info(person1.constructor === Object); 
//true

b).使用对象构造函数创建对象,每个对象的constructor属性引用这个构造函数

var p = new Person('张三', 29, '软件工程师');

//使用对象构造函数创建对象,

//每个对象的constructor属性,引用这个构造函数

console.info(p.constructor === Person);

 //true如何避免“忘记”new?可以使用arguments.callee解决这个问题      

//了解arguments.callee的作用     

function TestArgumentsCallee()

 {          

console.info(this);          

console.info(this instanceof TestArgumentsCallee);         

 console.info(this instanceof arguments.callee);     

 };      

TestArgumentsCallee(); //window                                         
//false                                          

//false      

new TestArgumentsCallee();  

//TestArgumentsCallee              

//true                                             
  //true

于是,可以直接用arguments.callee

 //避免忘记new     

 function MyObject(value) 

{         

 if (!(this instanceof arguments.callee))
{             

 //如果调用者忘记加上new了,就加上new再调用一次             
return new MyObject(value);         

 }         

 this.prop = value;     

 }      

//测试      

var obj1 = new MyObject(100);     

 console.info(obj1.prop);//100     

 var obj2 = MyObject(200);        

console.info(obj2.prop); //200

以上内容就是javascript设计模式之对象工厂函数与构造函数详解,希望大家喜欢。

Javascript 相关文章推荐
使用js获取QueryString的方法小结
Feb 28 Javascript
javascript下string.format函数补充
Aug 24 Javascript
简单学习JavaScript中的for语句循环结构
Nov 10 Javascript
javascript伸缩菜单栏实现代码分享
Nov 12 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
Nov 25 Javascript
JS防止网页被嵌入iframe框架的方法分析
Sep 13 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
Apr 13 jQuery
Node.js上传文件功能之服务端如何获取文件上传进度
Feb 05 Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
elementUi vue el-radio 监听选中变化的实例代码
Jun 28 Javascript
VUE前后端学习tab写法实例
Aug 06 Javascript
Javascript var变量删除原理及实现
Aug 26 Javascript
js判断浏览器类型及设备(移动页面开发)
Jul 30 #Javascript
javascript中if和switch,==和===详解
Jul 30 #Javascript
用javascript实现自动输出网页文本
Jul 30 #Javascript
理解javascript中的原型和原型链
Jul 30 #Javascript
原生js与jQuery实现简单的tab切换特效对比
Jul 30 #Javascript
文字垂直滚动之javascript代码
Jul 29 #Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
Jul 29 #Javascript
You might like
php cookies中删除的一般赋值方法
2011/05/07 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
js判断是否为ie的方法小结
2014/01/13 Javascript
js单词形式的运算符
2014/05/06 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
node.js基础知识汇总
2020/08/25 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
python字典的常用操作方法小结
2016/05/16 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
Python中单、双下划线的区别总结
2017/12/01 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
python线程池threadpool实现篇
2018/04/27 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
什么是测试驱动开发(TDD)
2012/02/15 面试题
保险专业大专生求职信
2013/10/26 职场文书
厨师长岗位职责
2014/03/02 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
小时代观后感
2015/06/10 职场文书
离婚协议书格式范本
2016/03/18 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
python获取淘宝服务器时间的代码示例
2021/04/22 Python