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 相关文章推荐
javascript Select标记中options操作方法集合
Oct 22 Javascript
jQuery列表拖动排列具体实现
Nov 04 Javascript
JavaScript实现非常简单实用的下拉菜单效果
Aug 27 Javascript
Bootstrap响应式侧边栏改进版
Sep 17 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
Mar 04 Javascript
js事件委托和事件代理案例分享
Jul 25 Javascript
vue登录路由验证的实现
Dec 13 Javascript
webpack多页面开发实践
Dec 18 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
May 16 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
Nov 02 Javascript
在微信小程序中使用vant的方法
Jun 07 Javascript
vue动态绑定style样式
Apr 20 Vue.js
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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
php使用google地图应用实例
2014/12/31 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
关于this和self的使用说明
2010/08/01 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
python实现多线程的两种方式
2016/05/22 Python
使用Python写一个小游戏
2018/04/02 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
python调用java的jar包方法
2018/12/15 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
Python文件操作基础流程解析
2020/03/19 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
运动会广播稿200米
2014/01/27 职场文书
大学军训感言200字
2014/02/26 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
未婚证明格式
2015/06/15 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python