手写new
Posted 饮尽杯中月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写new相关的知识,希望对你有一定的参考价值。
用new Object() 的方式新建了一个对象 obj
取出第一个参数,就是我们要传入的构造函数。此外因为 shift 会修改原数组,所以 arguments 会被去除第一个参数
将 obj 的原型指向构造函数,这样 obj 就可以访问到构造函数原型中的属性
使用 apply,改变构造函数 this 的指向到新建的对象,这样 obj 就可以访问到构造函数中的属性
返回 obj
过程
实现
当未使用new创建对象时
this指向window
当使用new时
会传入构造函数和参数,传入的参数为伪数组,需要转为真数组
伪数组agrument调用Array原型上的slice方法,传入0是返回原真数组args([proson,“李四”,20])
返回的为第一个参数构造函数Person
使得空对象content的this指向contructor(即是Person),使得content可以使用Peroson里面的name和age属性,传入args参数
此时如果return content, 会发现content的_proto_指向有问题
使用原生的new时 _proto_指向就没有问题
所以
完整版
以上是关于手写new的主要内容,如果未能解决你的问题,请参考以下文章