JS 手写 new 函数

工作中我们经常会用到 new 关键字,new 一个构造函数生成一个实例对象,那么new的过程中发生了什么呢,我们今天梳理下

  1. 创建一个对象
  2. 对象原型继承
  3. 绑定函数this
  4. 返回对象

先创建一个构造函数,原型上添加一个方法

javascript 复制代码
let Foo = function (name) {
  this.name = name
}

Foo.prototype.getName = function () {
  return this.name
}

然后,我们实现一个自定义new函数:

javascript 复制代码
function new_(fn, ...args) {
  let obj = {} // 创建一个对象
  obj.__proto__ = fn.prototype // 继承函数的原型
  fn.apply(obj, args) // 绑定this
  return Object.prototype.toString.call(obj) === '[object Object]' ? obj : {} // 返回对象,判断其有效性
}

使用,看下效果

javascript 复制代码
let foo = new_(foo, '张三')

console.log(foo)
console.log(foo.getName())

打印看下,看到完美输出

相关推荐
JSON_L1 分钟前
PHP项目打包为桌面应用
开发语言·php·桌面应用
2301_822366351 分钟前
C++中的协程编程
开发语言·c++·算法
m0_736919101 分钟前
C++中的事件驱动编程
开发语言·c++·算法
上海合宙LuatOS4 分钟前
LuatOS框架的使用(1)
java·开发语言·单片机·嵌入式硬件·物联网·ios·iphone
摘星编程4 分钟前
用React Native开发OpenHarmony应用:自定义useCSS类名操作
javascript·react native·react.js
小马_xiaoen8 分钟前
Vue3 + TS 实现长按指令 v-longPress:优雅解决移动端/PC端长按交互需求
前端·javascript·vue.js·typescript
lxl130710 分钟前
学习C++(4)构造函数+析构函数+拷贝构造函数
开发语言·c++·学习
阿kun要赚马内12 分钟前
Qt写群聊项目(二):客户端
开发语言·c++·qt
轩情吖15 分钟前
数据结构-并查集
开发语言·数据结构·c++·后端··并查集
wjs202420 分钟前
SQL CREATE DATABASE 命令详解
开发语言