【问题标题】:How to dynamically extend a class ref in javascript如何在javascript中动态扩展类引用
【发布时间】:2020-10-01 21:25:14
【问题描述】:

我想将一个类引用定义传递给一个函数。然后该函数应该使传递的类 ref 扩展另一个类。这是一个例子。我希望看到console.log 输出“根构造函数”,但它不会因为InputClassextends 行覆盖。

class Root {
  constructor(){
    console.log('Root constructor');
  }
}

function decorateClass(InputClass){
  class InnerClass {
    constructor(){

    }
  }

  // should extend InputClass but not override
  return class InputClass extends InnerClass{}
}

var ExtendedClass = decorateClass(Root);
var ec = new ExtendedClass();
// Should log 'Root constructor'

【问题讨论】:

标签: javascript class ecmascript-6 javascript-inheritance


【解决方案1】:

您的代码扩展了InnerClass,而不是您传递给函数的InputClass。函数参数被完全忽略。

我想你正在寻找

function decorateClass(InputClass){
  class InnerClass extends InputClass {
//                 ^^^^^^^^^^^^^^^^^^
    constructor(){
      super();
    }
  }

  return InnerClass;
}

【讨论】:

  • 不,不幸的是这令人困惑,我本质上希望InputClasssuper 传播到InnerClass
  • @kevzettler 这不太可能,InputClass 中没有 super(),所以它不会传播。
  • 你告诉我们,即使对原型进行了极端的操作,“它真的不可能吗?”只是想在我停止追求之前确定一下
  • @kevzettler 是的。如果“装饰”类尚未从某些东西继承(即使用 extends),则这是不可能的。您唯一的选择是创建一个新类,然后覆盖“装饰”类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多