function objectFactory() {
var obj = new Object(),
Constructor = [].shift.call(arguments);// shift会改变原数组,arguments第一个参数是构造函数,剩下是参数
obj.__proto__ = Constructor.prototype;// 实例的原型指向构造函数的原型
var ret = Constructor.apply(obj, arguments);// 构造函数的this指向实例
return typeof ret === 'object' ? ret : obj;// 如果构造函数返回obj就返回obj否则返回值
};