JavaScript Creating Objects Other Pattern
前面的日志中,抄了好多创建JavaScript对象的方法,包括工厂模式、原型模式、构造函数模式、混合模式、动态原型模式等。好了,大家快看烦了,日志也快结束了。
书中还为我们介绍了另外两种创建JavaScript对象的方法:寄生构造器模式和持久构造器模式。大家再忍耐一下,让我抄完~~
Parasitic Constructor Pattern
当其他创建对象的方法都不适合于你时,寄生构造器模式通常能满足你。该模式的主要意图是通过创建一个构造函数,在构造函数内部创建另一个对象并为其赋予方法,在最后将这个对象返回。
没错,就是用构造函数的模式来写工厂方法,你真聪明。让我们来看一个小例子:
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
var person = new Person("Nicholas", 29, "Software Engineer");
person.sayName(); //"Nicholas"
在构造函数内部,我们声明一个新的对象,并为其赋予方法然后将之返回。除了使用new运算符让我们知道这是一个构造函数模式,否则一切看起来都是一个工厂,不是吗?
When a constructor doesn’t return a value, it returns the
new object instance by default. Adding a return statement at the end of a constructor allows you to
override the value that is returned when the constructor is called.
在返回的新对象和构造函数之间没有任何关系,这也就意味着你不能通过instanceof运算符来确定对象类型。而且其同工厂模式一样,对函数存在重复申明的问题,大大滴浪费了我们的内存空间。
一般这种模式应用并不是很广泛,至少我很少看见这种创建对象的方式,不过并不代表其一无是处。
书中给了一个例子,当你不想破坏数组的原型对象时,却想让其有一个适应你当前程序的通用方法(即,所有数组都可以拥有的方法),一般可以这样做
//create the array
var values = new Array();
//add the values
values.push.apply(values, arguments);
//assign the method
values.toPipedString = function(){
return this.join("|");
};
//return it
return values;
}
var colors = new SpecialArray("red", "blue", "green");
alert(colors.toPipedString()); //"red|blue|green"
此段代码不多解释。
Durable Constructor Pattern
持久构造器模式和刚才介绍的寄生构造器模式看起来很像。只是在内部对象的方法里不使用this关键字,创建对象的实例时也不使用new运算符而已。先让我们看一下重写后的例子吧
//create the object to return
var o = new Object();
//optional: define private variables/functions here
//attach methods
o.sayName = function(){
alert(name);
};
//return the object
return o;
}
var person = Person("Nicholas", 29, "Software Engineer");
person.sayName(); //"Nicholas"
该种创建对象的方法适用于对数据安全要求很高的情况下,除了公有方法,没有任何途径可以获取内部数据,通过闭包严格的保证了数据的安全性。缺点嘛同上一模式。呵呵。
建议继续学习:
- 软件架构模式的种类 (阅读:2840)
- 让生活变简单的简单网站 (阅读:2236)
- 状态模式和策略模式的比较 (阅读:1802)
- JavaScript Dynamic Prototype Pattern (阅读:1757)
- 关于经营模式 (阅读:1626)
- 聊聊设计模式(4):装饰模式 (阅读:1457)
- Python创建单例模式的三种方式 (阅读:1421)
- [译]Go开发中一些有用的模式 (阅读:1023)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:simaopig 来源: 小小子,simaopig
- 标签: 寄生 持久 构造器 模式
- 发布时间:2010-06-02 23:00:51
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则