function person(name){
this.name=name;
}
person.prototype.getName=function(){
return this.name;
}
var objectFactory=function(){
var obj=new Object(),Constructor=[].shift.call(arguments);//这个地方不是太懂
obj._proto_=Constructor.prototype;
var ret=Constructor.apply(obj,arguments);
return typeof ret==='object'?ret:obj;
};
var a=objectFactory(person,'sven');
最近在看原型继承,看到这个demo的时候不太明白,希望大神能指点一下。
objectFactory
是工厂方法,是用来批量生产某个类的示例对象的。这里的某个类
,就是由第一个objectFactory
的第一个参数决定的。Constructor=[].shift.call(arguments)
这行代码,就是取出第一个参数,也就是上面所讲的某个类
。至于var obj=new Object();obj._proto_=Constructor.prototype;
这两句,比较新的写法是var obj = Object.create(Constructor.prototype)
。因为你这个不是直接new
出来的,所以要用__proto__
或Object.create
。需要注意的是,var ret=Constructor.apply(obj,arguments);
这行代码中的arguments
对象已经被shift
操作过咯,在上例中,此时的arguments是'sven'。