JavaScript进阶之new的实现

我的前端学习笔记📒

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

image

new

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

new 操作符会做什么操作❓

new操作符做了这些事:

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

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

如何调用

1const obj=New(Constructor)

实现

1 function New() { 2 3 var obj = new Object(), 4 5 Constructor = [].shift.call(arguments); // 为什么是这样因为调用 const obj=New(Constructor) 6 7 obj.__proto__ = Constructor.prototype; 8 9 var ret = Constructor.apply(obj, arguments); // arguments类数组为引用类型 10 11 return (typeof ret === "object" || typeof ret === "function") && ret !== null ? ret : obj; 12 13 };

我的前端学习笔记📒

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

image

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

React系列-轻松学会Hooks(中)

我的前端学习笔记📒最近花了点时间把笔记整理到语雀上了,方便童鞋们阅读我的前端学习笔记📒(https://www.yuque.com/wanggangfeng

写C端,如何优雅的处理多个弹框的显示?(附带源码)

我的前端学习笔记📒最近花了点时间把笔记整理到语雀上了,方便童鞋们阅读我的前端学习笔记📒(https://www.yuque.com/wanggangfeng

性能优化之防抖和节流

我的前端学习笔记📒最近花了点时间把笔记整理到语雀上了,方便童鞋们阅读我的前端学习笔记📒(https://www.yuque.com/wanggangfeng