原型链:在多个级别上调用“超级”方法

时间:2014-07-31 13:50:38

标签: javascript oop chaining prototype-chain

我有以下原型链

  • SuperSuperClass
    • 父类

每个都有一个名为do的方法。

调用相应的超类方法的常用方法是什么?
目前我使用<ClassName>.prototype.__proto__.<methodName>.call(this)但看起来很奇怪。

使用以下代码打印控制台(按预期方式):

  • Class.prototype.do
  • SuperClass.prototype.do
  • SuperSuperClass.prototype.do
SuperSuperClass = function SuperSuperClass() {}
SuperSuperClass.prototype.do = function() {
    console.log('SuperSuperClass.prototype.do');
};

function SuperClass() {
    SuperSuperClass.call(this);
}
SuperClass.prototype = Object.create(SuperSuperClass.prototype);
SuperClass.prototype.constructor = SuperClass;
SuperClass.prototype.do = function() {
    console.log('SuperClass.prototype.do');
    SuperClass.prototype.__proto__.do.call(this);
};

function Class() {
    SuperClass.call(this);
}
Class.prototype = Object.create(SuperClass.prototype);
Class.prototype.constructor = Class;
Class.prototype.do = function() {
    console.log('Class.prototype.do');
    Class.prototype.__proto__.do.call(this);
};

var objClass = new Class();
objClass.do();

JSFiddle

1 个答案:

答案 0 :(得分:3)

  

调用相应超类方法的常用方法是什么?

使用<SuperClassName>.prototype.<methodName>.call(this)。它不仅更短,而且还有利于在不支持非标准__proto__财产的环境中工作。