浏览 353 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-07-14 关键字: javascript factory 工厂
这个工厂是不是和别人说的工厂模式不太一样呀!所以说是对象工厂。名字只是个符号。
/**
*名称:JavaScript 对象工厂
*说明:根据第一参数的类型,创建同类型的对象,并且用其它参数对象的成员通过prototype方法扩展此返回对象.
*/
function Factory(){
if (0==arguments.length) return null;
var args=[].slice.call(arguments,0);
var self=args.shift();
switch(self.constructor){
case Function:
var factory=function(){
var func=function(){
if (typeof arguments.callee.this =='function')
arguments.callee.this.apply(arguments.callee,arguments);
}
for (var p in this) func[p]=this[p];
return func;
}
for (var i=0;i<args.length;i++)
for (var p in args[i])
factory.prototype[p]=args[i][p];
return new factory();
case Array:
case Object:
var factory=function(){};
factory.prototype=self;
return new factory;
case Number:
case Boolean:
return (self).constructor(self);
}
}
Factory(3);
Factory(true);
Factory({foo:3});
Factory([{d:3}]);
function ff(){};
Factory(ff);
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-13
1.constructor是不可靠的
2.1和new Number(1)没有区分 3.对于用途十分不解 Function的处理十分奇怪 |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-13
"1和new Number(1)没有区分 "谁告诉你的,Primitive value和Object一样吗
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-13
afcn0 写道 "1和new Number(1)没有区分 "谁告诉你的,Primitive value和Object一样吗
我说楼主的代码没有区分1和new Number(1) 你脑子有问题? |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-14
csf178 写道 1.constructor是不可靠的
2.1和new Number(1)没有区分 3.对于用途十分不解 Function的处理十分奇怪 1.是的,但是很多方法的应用都有契约性,看来我这个方法也有契约性了 2.其实这个方法在实际应用中根本不必要写出Boolean,Number这样的支持。我只是说明这个方法同样支持这个, 3.我也是刚刚想到可以这样做,至于用途,我还没有仔细分析。不过大家都知道,用途这个东西要到应用中去找 还有就是,这种处理很正常,既然是对象工厂,那么就应该能创建JavaScript中的几个常用类型,Array,Object,Function,甚至Boolean,Number都应该支持,当然除此之外还应该有扩展能力(工厂嘛,给不同的材料,加工这些材料打造新产品) 综合3点,因为用途不明确,怎么使用也不明确,所以这个方法应该还有很多商榷,总之不明确,但是这个方法确实是..............我找不到词 |
|
| 返回顶楼 | |





