Javascript寄生继承

时间:2011-08-30 22:12:22

标签: javascript inheritance

我正在努力使用Javascript 经典继承 1。虽然最终道格拉斯·克罗克福德拒绝了它在Javascript中支持经典模型的第一次尝试,但我觉得有趣的是理解:

  

我已经写了8年的JavaScript了,我从来没有发现需要使用超级功能。超级想法在经典模式中相当重要,但在原型和功能模式中似乎是不必要的。我现在看到我早期尝试在JavaScript中支持经典模型是一个错误。

然而,对于寄生继承的关注点还有一些不太明确的地方:

function ZParenizor2(value) {
   var that = new Parenizor(value);
   that.toString = function () {
      if (this.getValue()) {
         return this.uber('toString');
      }
      return "-0-"
   };
   return that;
 }

ZParenizor,据我所知,是根据Parenizor来定义的。但Parenizor是基类,它继承自无人。因此,我不会定义this.uber函数,实际上当我调用新ZParenizor2对象的toString方法时,我会出错。

我是正确的,还是我无视某些事情?

更新 我是正确的。此方法仅在创建ZParenizor时使用0作为参数,因为它不需要调用uber方法(正如您可以从方法imeplementation中看到的那样)。

当您使用其他参数尝试时,我收到此错误:

Uncaught TypeError: Object #<error> has no method 'uber'

1 个答案:

答案 0 :(得分:2)

您可以修改Parenizor的原型以获得超级功能,它可以与任何其他值一起使用。