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否则返回值 };