javascript - 当 JavaScript 中的类没有默认构造函数时,如何扩展它?

标签 javascript inheritance constructor

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

  1. 必须通过 instanceof 测试。
  2. 不得修改现有构造函数。
  3. 必须调用 super 构造函数。
  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.

我的解决方案失败,因为抛出异常

最佳答案

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

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

这有效,并且您的所有测试都已通过。

有用的阅读:Inheritance in JavaScript

关于javascript - 当 JavaScript 中的类没有默认构造函数时,如何扩展它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55763403/

相关文章:

javascript - 谷歌地图全高风格angularjs

c++ - 如何使用继承作为参数的 std::string?

AJAX 调用后 JavaScript 不工作 - AJAX 选项卡

javascript - 为动态创建的按钮传递按钮值

c# - 继承问题,从继承类的某些数据上获取 NULL

inheritance - 在 GitLab CI 中使用 `extends` 时,哪些作业属性会被合并或覆盖?

codeigniter - 为什么这个构造函数无法在 Codeigniter 中加载?

javascript - 根据特定条件创建对象

c++ - 使用聚合初始化列表优于构造函数的优势?

javascript - location.href + '' 的用途是什么