0%

自己动手实现系列 ---- new

实现一个new操作符

我们首先知道new做了什么:

  1. 创建一个空的简单 JavaScript 对象(即{})
  2. 链接该对象(即设置该对象的构造函数)到另一个对象
  3. 将步骤(1)新创建的对象作为 this 的上下文
  4. 如果该函数没有返回对象,则返回 this

知道new做了什么,接下来我们就来实现它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function create(){
// 创建一个空的对象
let obj = {};
// 获得构造函数
let Con = [].shift.call(arguments)
// 将空对象指向构造函数的原型链
Object.setPrototypeOf(obj, Con.prototype);
// obj.__proto__ = Con.prototype // 链接到原型
// obj绑定到构造函数上,便可以访问构造函数中的属性,即this.obj.Con(args)
let result = Con.apply(obj, arguments);
// 如果返回的result是一个对象则返回
// new方法失效,否则返回obj
return result instanceof Object ? result : this.obj;
// return typeof result === 'object' ? result : obj// 确保 new 出来的是个对象
}
如果觉得不错请支持作者
------ 版权声明 ------

本文标题:自己动手实现系列 ---- new

文章作者:

发布时间:2020年03月24日 - 04:40

最后更新:2020年04月02日 - 03:20

原始链接:https://blog.lifesli.com/2020/03/24/do-it-yourselfery-new/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。