美文网首页
原生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