前端开发那些事儿前端大杂烩

实现 new 运算符

2021-04-29  本文已影响0人  lio_zero

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

上一篇 下一篇

猜你喜欢

热点阅读