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方法实现原理

    本小节知识: 【掌握】new方法实现原理 1.new方法实现原理 完整的创建一个可用的对象:Person *p=[...

  • new实现原理

    假如让你实现一个new的功能,首先我们需要搞清楚:new关键字都做了什么工作? 在浏览器控制台打印一下结果: 从结...

  • SpringApplication. run()的实现原理

    SpringApplication. run()的实现原理。 return new SpringApplicati...

  • new方法实现原理

    //问题1:创建对象时,alloc做了什么事情?init做了什么事情?答:alloc做了三件事:1.开辟内存空间2...

  • new方法实现原理

    new做了三件事情1.开辟存储空间 + alloc 方法2.初始化所有的属性(成员变量) - init 方法3....

  • Objective-C基础学习之new方法实现原理

    1.new方法实现原理 完整的创建一个可用的对象:Person *p=[Person new]; new方法的内部...

  • OC 构造方法

    1. new方法实现原理 自动调用构造方法,完整的创建一个可用的对象:Person *p=[Person new]...

  • 手写实现系列

    实现 new 方法 Object.create 的实现原理 实现数据绑定 深拷贝 防抖函数 节流函数 冒泡排序 快速排序

  • new 原理及模拟实现

    定义 new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 ——(来自于MDN) 举个栗...

  • Python单例模式

    用__new__实现 关于__new__的内部原理,请点击 为了让子类不继承父类的__new方法,子类也应该调用o...

网友评论

    本文标题:new实现原理

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