关键词new都做了些什么

构造函数的实例

首先了创建一个构造函数,这个构造函数包含一个原型属性是say

function A(name) {
  this.name = name
}
A.prototype.say = function() {
  console.log('haha')
}

创建一个A的实例并且打印

let a = new A()
console.log(a)
console.log(Object.prototype.toString.call(a)) // [object Object]
console.log(a.__proto__ == A.prototype) // true
关键词new都做了些什么_第1张图片
image.png

可以看到此时的a是一个object,a的隐式原型指向A的显示原型,根据以上,可以大概推导出new的过程

_new

function _new(...func) {
  let _obj = {} // 创建一个空对象,这个对象将会是返回值
  let [o, ...args] = func // 保存一下构造函数和传入的参数
  o.apply(_obj, [...args]) // 继承属性
  _obj.__proto__ = func.prototype // 原型赋值给隐式原型
  return _obj
}
let a = _new(A, 'tom')
console.log(a)
console.log(Object.prototype.toString.call(a)) // [object Object]
console.log(a.__proto__ == A.prototype) // true
a.say()

结果相同


关键词new都做了些什么_第2张图片
image.png

你可能感兴趣的:(关键词new都做了些什么)