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_指向构造函数的原型
相关推荐
光影少年1 小时前
vue打包优化方案都有哪些?
前端·javascript·vue.js
木易 士心4 小时前
Ref 和 Reactive 响应式原理剖析与代码实现
前端·javascript·vue.js
uhakadotcom5 小时前
execjs有哪些常用的api,如何逆向分析网站的加签机制
前端·javascript·面试
闲蛋小超人笑嘻嘻6 小时前
find数组方法详解||Vue3 + uni-app + Wot Design(wd-picker)使用自定义插槽内容写一个下拉选择器
前端·javascript·uni-app
小牛itbull6 小时前
初始化electron项目运行后报错 electron uninstall 解决方法
前端·javascript·electron
rggrgerj7 小时前
Vue3 组件完全指南代码
前端·javascript·vue.js
在逃的吗喽9 小时前
Vue3新变化
前端·javascript·vue.js
Demoncode_y9 小时前
Vue3中基于路由的动态递归菜单组件实现
前端·javascript·vue.js·学习·递归·菜单组件
Never_Satisfied9 小时前
在JavaScript / HTML中,浏览器提示 “Refused to execute inline event handler” 错误
开发语言·javascript·html
Never_Satisfied9 小时前
在JavaScript / HTML中,事件监听的捕获和冒泡阶段解析
开发语言·javascript·html