# new命令

new命令的作用,就是执行构造函数,返回一个实例对象。

new操作符的具体功能

  1. 在堆区创建一个空对象
  2. 把这个对象的原型属性也就是__proto__ 指向构造函数的原型对象
  3. 把构造函数的this指向这个对象,运行构造函数赋值
  4. 如果构造函数返回值不是一个引用对象或者说没有返回值, 则返回这个对象

# 模式实现

function objectFactory() {
  const obj = new Object();
  const Constructor = [].shift.call(arguments);
  if (typeof Constructor !== 'function') {
    throw new TypeError('Expect a function');
  }
  obj.__proto__ = Constructor.prototype;
  var ret = Constructor.apply(obj, arguments);
  return typeof ret === 'object' && ret !== null ? ret : obj;
}

使用instanceof判断构造函数内部是不是用了new命令

function Person(name) {
  if (!(this instanceof Person)) {
    throw new Error('call the function with new keyword');
  }
  this.name = name;
}

也可以使用new.target来判断

function Animal(name) {
  if (!new.target) {
    throw new Error('call the function with new keyword');
  }
  this.name = name;
}

上次更新: 1/22/2025, 9:39:13 AM