如何实现一个new
个人题解
1 | function Demo(a, b) { |
- 试了好一会试出来的
- 一直用prototype方法不行,挠头….
- proto 这个方法记得不是标准写法
- 标准写法是contructor prototype?看答案吧
最高赞题解
1 | function _new(fn, ...arg) { |
先理清楚 new 关键字调用函数都的具体过程,那么写出来就很清楚了
- 首先创建一个空的对象,空对象的proto属性指向构造函数的原型对象
- 把上面创建的空对象赋值构造函数内部的this,用构造函数内部的方法修改空对象
- 如果构造函数返回一个非基本类型的值,则返回这个值,否则上面创建的对象
结论
- proto 不是标准对象,使用
Object.create(fn.prototye)
创建原型对象 - 需要判断传入的对象是不是null或者undefined来判断是否返回实例对象
- 不需要使用必包的方式进行返回(单例模式或许可以)