手撕new

手撕new

十月 13, 2020

前言

手撕一系列代码的初衷并不是说证明什么,而是手撕代码后的愉悦感,可以体会原理层的东西,在使用方面的疑问,通通解掉。

Sources

1
2
3
4
5
6
7
8
const MyNew = (fn, ...props) => {
const Constructor = fn;
const _obj = Object.create(Constructor.prototype);
const ConsRet = Constructor.apply(_obj, props);

return (typeof ConsRet === 'object' && ConsRet) ? ConsRet : _obj;

}

重点剖析

  • JS构造函数普通成员函数的区别;
  • this指向构建&__proto__关联;
  • 实例化实参的注入,需理解call&apply的区别;