没有默认构造函数时,如何在JavaScript中扩展类?

时间:2019-04-19 14:28:36

标签: javascript inheritance constructor

在JavaScript中,当分配新类的原型时没有适合使用的构造函数时,如何扩展基类?解决方案...

  1. 必须通过instanceof测试。
  2. 不得修改现有的构造函数。
  3. 必须调用超级构造函数。
  4. 不得包括我编写的中间类。
  5. 不得依赖第三方代码,例如jQuery。
  6. 可能涉及您提供的帮助程序功能。

这是我尝试过的。

function Person(name) { // Immutable base class.
  if (typeof name != "string" || name == "") {
    throw new Error("A person must have a valid name.");
  }
  this.getName = function() {
    return name;
  }
}

function Artist(name) { // My extending class.
  Person.call(this, name); // Call super constructor.
}
Artist.prototype = new Person(); // Express inheritance without parameters.
var tom = new Artist("Tom");
console.info(tom instanceof Person); // Must print true.
console.info(tom.getName()); // Must print Tom.

我的解决方案失败,因为引发了异常

1 个答案:

答案 0 :(得分:4)

您做的继承错误,应该是:

Artist.prototype = Object.create(Person.prototype);

这行得通,您的所有测试都通过了。

有用的读物​​:Inheritance in JavaScript