实例对象与 new 命令

JavaScript 程序的对象基于构造函数(constructor)和原型链(prototype)

构造函数的特点

  • 内部使用this指向生成的实例对象
  • 生成对象的时候使用new命令
// 定义一个构造函数
function Animal () {
  this.color = 'red'
}

var sheep = new Animal()
sheep.color // "red"

通常构造函数的首字母大写

new 命令

构造函数生成实例对象必须使用new命令,如果不使用new命令,则和普通函数无区别,并且没有自己的作用域(scope)

new命令的执行流程

  • 创建一个空对象作为返回实例对象
  • 将空对象的原型指向构造函数的prototype属性
  • 空对象内部的this对象指向这个空对象
  • 执行构造函数内部的代码

如果构造函数内部有return语句,则通过new命令生成实例对象的返回为return语句后面的内容,否则为实例对象本身

new.target 命令

在构造函数内部可以使用new.target命令,判断当前函数是否通过new命令调用,如果new.target与当前构造函数比较返回逻辑真,则表示当前函数是通过new调用,否则为普通函数调用

var F = function () {
  if (new.target !== F) {
    console.log('请使用 new 命令调用')
  }
}
var f = F()
// "请使用 new 命令调用"
上次更新: 9/4/2018, 3:02:35 PM