new 一个构造函数的过程以及手写 new

  1. new 一个构造函数的过程:

【1】创建一个空对象

【2】空对象的的隐式原型 proto 或 [[ prototype ]] 指向构造函数的显示原型 prototype

【3】将 this 指向新对象

【4】执行构造函数内部代码,给新对象添加属性

【5】返回新对象

2.手写new

javascript 复制代码
funtion myNew(fn, ...args){
    let obj = Object.create(fn.prototype);
    let res = fn.apply(fn, args);
    // 构造函数执行后,返回值如果不是是对象或函数,则返回新创建的对象
    return res instanceof Object ? res: obj; 
}

也有这样写的
let obj = {};
obj._proto_ = fn.prototype;

其实目的都是为了让新创建的对象的_proto_指向构造函数的原型
相关推荐
江沉晚呤时12 分钟前
C# 状态模式深度解析:构建灵活的状态驱动系统
开发语言·javascript·数据库·ui·ajax·c#·ecmascript
还是鼠鼠31 分钟前
Node.js局部生效的中间件
javascript·vscode·中间件·node.js·json·express
好_快1 小时前
Lodash源码阅读-baseProperty
前端·javascript·源码阅读
每一天,每一步1 小时前
echarts生成3D立体地图react组件
javascript·react.js·echarts
好_快3 小时前
Lodash源码阅读-baseMatchesProperty
前端·javascript·源码阅读
好_快3 小时前
Lodash源码阅读-hasPath
前端·javascript·源码阅读
好_快3 小时前
Lodash源码阅读-hasIn
前端·javascript·源码阅读
好_快3 小时前
Lodash源码阅读-basePropertyDeep
前端·javascript·源码阅读
vvilkim6 小时前
深入理解 TypeScript 中的 implements 和 extends:区别与应用场景
前端·javascript·typescript
刺客-Andy10 小时前
前端加密方式 AES对称加密 RSA非对称加密 以及 MD5哈希算法详解
前端·javascript·算法·哈希算法