JavaScript进阶之new的实现

落落落洛克 等级 288 0 0

我的前端学习笔记📒

最近花了点时间把笔记整理到语雀上了,方便童鞋们阅读

JavaScript进阶之new的实现

JavaScript进阶之new的实现

new

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例

new 操作符会做什么操作❓

new操作符做了这些事:

  • 它创建了一个全新的对象。
  • 它会被执行 [[Prototype]](也就是 __proto__)链接。
  • 它使 this指向新创建的对象,也就是new操作会改变this指向
  • 通过 new创建的每个对象将最终被 [[Prototype]]链接到这个函数的 prototype对象上。
  • 如果函数没有返回对象类型 Object(包含 Functoin,Array,Date,RegExg,Error),那么 new表达式中的函数调用将返回该对象引用。

那么我们用函数来模拟new操作符的实现吧

如何调用

const obj=New(Constructor)

实现

 function New() {

     var obj = new Object(),

     Constructor = [].shift.call(arguments); // 为什么是这样因为调用 const obj=New(Constructor)

     obj.__proto__ = Constructor.prototype;

     var ret = Constructor.apply(obj, arguments); // arguments类数组为引用类型

     return (typeof ret === "object" || typeof ret === "function") && ret !== null ? ret : obj;

 };

我的前端学习笔记📒

最近花了点时间把笔记整理到语雀上了,方便童鞋们阅读

JavaScript进阶之new的实现

JavaScript进阶之new的实现

收藏
评论区