从"抽象"中调用构造函数base" class"

时间:2015-02-09 12:45:32

标签: javascript node.js

我有以下要求:

  • 我的超级" "类"必须是"抽象"
  • 我" super"的构造函数"类"必须由继承的类
  • 调用
  • 继承"类的构造函数"必须做一些事......

我试过这样:

var Father = function() {
    if(this.constructor === Father) {
        // ...I throw an exception here to make it "abstract"...
    }
    alert('Father constructor');
};
Father.prototype.say = function() {
    alert('Im your father');
};

var Son = function() {
    Father.call(this);
    alert('Son constructor');
};
Son.prototype = Object.create(Father.prototype);

var son = new Son();
son.say();

使用this.constructor === Father我尝试将Father实现为" abstract" "类" (如果它是真的,我在我的真实代码中抛出错误。)

Father.call(this);确保调用我的超类的构造函数。但是this.constructor === Father是真的。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

问题是您在进行派生时没有正确设置constructor属性。在这一行之后:

Son.prototype = Object.create(Father.prototype);

你需要

Son.prototype.constructor = Son;

这只是使用构造函数执行此类继承的样板的一部分。没有它,Son.prototype将继承JavaScript引擎在创建Father.prototype.constructor函数时设置的Father属性。您必须为Son明确地执行此操作,因为您替换 Son.prototype上的对象(这是正确的事情,您只需要执行此操作{{ 1}} fixup)。