new实现原理

作者: 姜治宇 | 来源:发表于2020-03-29 21:17 被阅读0次

    假如让你实现一个new的功能,首先我们需要搞清楚:
    new关键字都做了什么工作?

    function Person(name){
            this.name = name
        }
    
        var p = new Person('jack')
    
        console.log(p)
    
    在浏览器控制台打印一下结果: new.jpg

    从结果来看,new肯定是返回了一个object对象,而且这个对象必须具有原型指针proto和属性name两个东西。
    我们可以先new一个空白的对象出来:

    function myNew(){
            let obj = new Object()
            console.log(obj)
        }
    myNew()
    

    打印结果:

    obj.jpg
    我们首先看proto指针,干净的object对象,proto肯定是指向Object原型了,这是最根上的,而new出来的新对象,proto指向的是Person原型。
    function myNew(){
            let obj = new Object()
           
            let func = [].shift.call(arguments)//出列,获取第一个参数
            obj.__proto__ = func.prototype //proto指向原型
         
            return obj
    
        }
        console.log(myNew(Person,'jack'))
    
    看一下结果: compare.jpg

    差不多了,还差一个name属性没进来。我们需要在干净的object上增加一个name属性,这个很容易,只需改变一下Person函数的this指向即可。

    function myNew(){
            let obj = new Object()
    
            let func = [].shift.call(arguments)//出列,获取第一个参数
            obj.__proto__ = func.prototype //proto指向原型
            func.apply(obj,arguments)//修改this指向
    
            return obj
    
        }
        console.log(myNew(Person,'jack'))
    

    相关文章

      网友评论

        本文标题:new实现原理

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