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())

打印看下,看到完美输出

相关推荐
吴梓穆1 分钟前
UE5 c++打印日志
开发语言·c++·ue5
不会写DN1 分钟前
php 如何使用mysqli连接mysql
开发语言·mysql·php
赫瑞2 分钟前
Java中的进阶最长上升子序列——LIS
java·开发语言
吴梓穆2 分钟前
UE5 C++ 绘制图形调试宏
开发语言·c++·ue5
skywalk81633 分钟前
windows10安装python3.14
开发语言·python
2501_908329853 分钟前
C++中的装饰器模式
开发语言·c++·算法
x***r1514 分钟前
Dev C++ 6.5安装与配置教程 Windows版:解压+管理员运行+自定义路径+中文设置指南
开发语言·c++
南 阳11 分钟前
Python从入门到精通day58
开发语言·python
楚Y6同学12 分钟前
为什么 C++ 要设计函数重载
开发语言·c++
steins_甲乙12 分钟前
【无标题】
开发语言·c++