实现 new 运算符

作者: lio_zero | 来源:发表于2021-04-29 16:17 被阅读0次

new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一

原理

MDN 对 new 解释的操作步骤如下:

  1. 创建一个空的简单 JavaScript 对象(即 {});
  2. 链接该对象(设置该对象的 constructor)到另一个对象 ;
  3. 将步骤 1 新创建的对象作为 this 的上下文 ;
  4. 如果该函数没有返回对象,则返回 this

考虑返回值

  • 假如构造函数有返回值且是对象,返回这个对象
  • 假如构造函数有返回值且不是对象,返回创建的空对象
  • 假如构造函数没有返回值,返回创建的空对象

实现

function myNew() {
  let obj = {}
  let Constructor = [].shift.call(arguments)
  obj.__proto__ = Constructor.prototype
  let ret = Constructor.apply(obj, arguments)
  return typeof ret === 'object' ? ret : obj
}

示例:

function Person(name, age) {
    this.name = name
    this.age = age
}
let p = myNew(Person, 'O.O', 20)
console.log(p)  // { name: 'O.O', age: 20 }

扩展:可以使用 new 一个箭头函数吗?

箭头函数没有 prototype、没有自己的 this 指向、不可以使用 arguments、自然不可以 new

更多资料

第 14 题:情人节福利题,如何实现一个 new

相关文章

  • js中new操作符做了什么并实现自己的new操作符

    我们通过new运算符的使用,来探寻new操作符在执行的过程中究竟做了哪些操作,并且根据操作实现自己的new运算符。...

  • 实现 new 运算符

    new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一 原理 MDN 对 new 解释的操...

  • Python:Python学习总结(三)

    魔法方法 对象构造相关:new、init、del。 运算符重载:所有运算符都能重载。 属性访问 集合实现 可调用对...

  • 模拟new的实现

    new运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一 模拟new之前,看看new实现了哪些...

  • new 运算符实现细节

    由上面这个例子可以知道new在执行时做了哪些事情: 创建一个新对象 将传入的参数变为了新对象的属性,这是构造函数内...

  • 第四章 对象和数组

    Object类型 创建方法有两种,字面量和new运算符 1. 使用new运算符 let obj = new Obj...

  • 动态内存分配

    注:以下大部分内容来源于 coursera 课程《C++程序设计》 用new 运算符来实现动态内存分配 new运算...

  • 原型和原型链

    一、new 和 构造函数 1.1 new 运算符 new 运算符用来创建一个新的对象,其后面需紧跟一个函数,该函数...

  • new运算符的实现机制

    先来看一个例子,分别用新旧方式创建类,并实例化。 分别创建两个类的实例 首先,可以看输出结果。很明显两个实例的结构...

  • JS new 运算符源码实现

    new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作: 1...

网友评论

    本文标题:实现 new 运算符

    本文链接:https://www.haomeiwen.com/subject/nzjnlltx.html