首页 > 解决方案 > 如何构建类似构造函数的函数?

问题描述

当我阅读面向 Web 开发人员的专业 JavaScript 的第 6 章面向对象编程时,它显示了通过构造函数创建对象的模式。

// implicit way
function Person(name) {
  this.name = name;
}

var person1 = new Person('Greg')
person1 instanceof Person

要创建 Person 的新实例,请使用 new 运算符。以这种方式调用构造函数本质上会导致执行以下四个步骤:

  1. 创建一个新对象。

  2. 将构造函数的 this 值分配给新对象(因此 this 指向新对象)。

  3. 执行构造函数内的代码(将属性添加到新对象)。

  4. 返回新对象。

这显示了如何创建对象实例的隐式方式。

我想明确地遵循它。就像是:

function Person(name) {
  var o = Object.call(this)  // step 1 and step 2
  o.name = name              // step 3
  return o                   // step 4
}

var person1 = new Person('Greg')
person1 instanceof Person // false

事实上,它不能作为构造函数模式。为什么?以及如何修改我的代码以使用显式方式创建构造函数?

https://javascript.info/constructor-new

标签: javascriptecmascript-6

解决方案


因为Object.call(this)没有什么意义,因为该函数不关心其上下文并返回一个普通对象。相反,您可以使用:

  Object.create(this.constructor.prototype)

推荐阅读