全回顾扫盲js之 new 运算的原理

执行步骤

  • 1.一个新的对象被创建,它继承自foo的原型对象
  • 2.构造函数foo被执行,执行的时候传入参数,同时执行上下文(this)被指定为新的对象。new foo在不传参数的情况下,等同于 new foo()
  • 3.如果构造函数返回了一个对象,那么将替换new出来的结果。如果构造函数没有返回对象,那么返回结果为第一步创造出来的对象

模拟执行代码

function newFn (func) {
  var o = Object.create(func.prototype)
  console.log(o)
  var o2 = func.call(o)
  console.log(o)
  console.log(o2)
  if(typeof o2=== 'object') {
    return o2
  } else {
    return o
  }
}

function foo1 () {
  this.name = '大麦'
}
function foo2 () {
  this.name = '大麦'
  return {age:27}
}
var foo3 = newFn(foo1)
var foo4 = newFn(foo2)
console.log(foo3)
console.log(foo4)

总结一下

new 运算就是新建一个对象,然后针对原型对象做指针,构造函数属性做创建

随机浏览