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

打印看下,看到完美输出

相关推荐
码海踏浪4 分钟前
JMeter 时间函数合集
开发语言·python
unicrom_深圳市由你创科技4 分钟前
Vue 3 高效开发技巧总结
前端·javascript·vue.js
麦麦鸡腿堡5 分钟前
Java_反射暴破创建对象与访问类中的成员
java·开发语言
不会c嘎嘎6 分钟前
深入理解QT之信号和槽
开发语言·qt
SunnyDays10116 分钟前
Python 实现 PDF 文档压缩:完整指南
linux·开发语言·python
Cx330❀7 分钟前
《C++ 动态规划》第001-002题:第N个泰波拉契数,三步问题
开发语言·c++·算法·动态规划
神仙别闹8 分钟前
基于Qt5(C++)+SQLite 开发的一个小巧精美的本地音乐播放器
开发语言·c++·qt
差点GDP9 分钟前
C语言常用编译命令和示例
c语言·开发语言
weixin_3077791311 分钟前
Jenkins Pipeline: Input Step插件详解与实践指南
运维·开发语言·自动化·jenkins·etl
宵时待雨14 分钟前
C语言笔记归纳21:编译与链接
linux·c语言·开发语言·笔记