NEW

185 阅读1分钟

废话少说,上代码 o(*  ̄︶ ̄*)o

        // 构造函数
        function Foo(name, age){
            this.name = name;
            this.age = age;
            // new :若构造函数含return值且为一个对象,则构造的实例为return出来的对象
            // return {};
        }
        function objectFactory(){
            // 1.创建一个新的对象
            const obj = {};
            // 获取构造函数Foo
            const Constructor = [].shift.call(arguments);
            // 2.把obj的__proto__指向fn的prototype,实现继承
            obj._proto_ = Constructor.prototype;
            // 3.改变this的指向,执行构造函数,传递参数
            let res = Constructor.apply(obj, arguments);
            // 4.返回新的对象obj
            return Object.prototype.toString.call(res) === '[object Object]' ? res : obj;
        }
        
        let f = objectFactory(Foo, 'wn', 18);
        console.log(f.name, f.age); // wn 18