手写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的主要内容,如果未能解决你的问题,请参考以下文章

手写new

JS手写New操作符

new一个对象的过程是什么,手写代码表示

JavaScript手撕前端面试题:手写new操作符 | 手写Object.freeze

手写new

js面试-手写代码实现new操作符的功能