实现new关键字

127 阅读1分钟
What

new关键字用于创建一个构造函数的实例对象

new关键字做了哪些事情
  1. 创建了一个新的obj对象
  2. 这个对象的__ptoto__属性指向构造函数的prototype
  3. 把这个对象作为构造函数的执行上下文this
  4. 如果有返回值,返回执行结果,没有返回值就返回这个对象
代码实现
     function myNew(Func,...args){
            //首先创建一个对象
            let obj = {};
            //obj的隐式原型对象指向Func构造函数的显示原型对象
            obj.__proto__ = Func.prototype;
            //将Func的上下文改为obj
            let result = Func.apply(obj,args);
            //如果没有返回值就返回obj
            return result instanceof Object?result:obj;
        }

使用

        let Person =function(name,age){
            this.name = name,
            this.age = age;

        }
        Person.prototype.getthis = function(){
            console.log(this.name)
        }
        let person1 = myNew(Person,'lxy',18);
        person1.getthis();