1. /**
    2. * 用new Object() 的方式新建了一个对象 obj
    3. * 取出第一个参数,就是我们要传入的构造函数。此外因为 shift 会修改原数组,所以 arguments 会被去除第一个参数
    4. * 将 obj 的原型指向构造函数,这样 obj 就可以访问到构造函数原型中的属性
    5. * 使用 apply,改变构造函数 this 的指向到新建的对象,这样 obj 就可以访问到构造函数中的属性
    6. * 返回 obj
    7. */
    8. function Otaku(name, age) {
    9. this.name = name;
    10. this.age = age;
    11. this.habit = 'Games';
    12. }
    13. function objFactory() {
    14. var obj = new Object()
    15. var Constructor = [].shift.call(arguments)
    16. obj.__proto__ = Constructor.prototype;
    17. Constructor.apply(obj, arguments);
    18. return typeof ret === 'object' ? ret : obj;
    19. }
    20. var person = objFactory(Otaku)
    21. console.log(person)