美文网首页
原生JS实现new方法

原生JS实现new方法

作者: 再见噜噜班 | 来源:发表于2020-03-08 11:21 被阅读0次

Javascript中的new操作符实际上做了以下4件事情:

  1. 创建一个新的空对象
  2. 链接新创建的对象和构造函数的原型对象(就是将新对象的隐式原型__proto__指向构造函数的原型对象prototype
  3. 执行构造函数,并将构造函数中的this指向新的对象
  4. 第三步如果没有返回对象,就返回this
     function createNew(){
        //创建新的空对象
        let obj = {};
        //解构获得构造函数和参数
        let  [constructor,...params] = [...arguments];
        //链接对象到函数原型
        obj.__proto__  = constructor.prototype;
        //执行构造函数,将构造函数中的this指向obj对象
        let result = constructor.apply(obj,params);
        //如果函数没有返回对象,就返回新创建的对象
        return typeof result === 'object'?result:obj        
    }


    function Person(name){
        this.name=name;
        Person.prototype.sayName=()=>{
            console.log(this.name)
        }
    }
    let a = new Person('king');
    a.sayName()
    console.log(a)//Person {name: "king"}

    let b = createNew(Person,'sara')
    console.log(b)//Person {name: "sara"}

相关文章

网友评论

      本文标题:原生JS实现new方法

      本文链接:https://www.haomeiwen.com/subject/cshddhtx.html