Skip to content

new 操作符

构造函数

  • 构造函数其实也是常规函数,但是有两个约定。

  1. 命名时首字母大写(不是必须,是一个共同约定,明确表明函数将使用new执行)
  2. 只能用“new”操作符执行
js
function User(name) {
  // this = {} 隐式创建
  this.name = name
  // return this 隐式返回
}

let user = new User('Tom')
console.log(user.name) // Tom
  • 当一个函数执行new User(...)操作时,发生了什么?

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

let user = new User('Tom')
console.log(user.name) // Tom

// 隐式创建及返回
function User2(name) {
  const obj = {}
  obj.name = name
  obj.__proto__ = User2.prototype
  return obj
}

let user2 = new User2('Jack')
console.log(user2.name) // Jack
  • 模拟实现 new

js
  function _new(fn, ...args){
    const obj = Object.create(fn.prototype)
    const res = fn.apply(obj, args)
    return res instanceof Object ? res : obj
  }

参考资料

Updated at: