这个工厂是不是和别人说的工厂模式不太一样呀!所以说是对象工厂。名字只是个符号。
/**
*名称: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);
本文介绍了一个JavaScript对象工厂函数,能够根据不同类型的输入创建相应的对象,并利用原型链进行属性扩展。适用于函数、数组、对象、数字及布尔值等多种类型的实例化。
1751

被折叠的 条评论
为什么被折叠?



