"Enhance" ECMAScript 2017 (Firefox v55) 中的现有 JS class?

"Enhance" existing JS class in ECMAScript 2017 (Firefox v55)?

基本上我想知道是否可以在 class 级别而不是实例级别重新定义方法,如 here.

所寻求的

另外,为了清楚起见,我希望能够从 enhanced/replacement 方法中调用原始方法(在 this 上)。

我尝试实现所选的答案,"decorating the constructor",但它似乎在 FF55 的 "SpiderMonkey" 版本的 ES2017 中不起作用:我收到一条消息说 class "requires new".

我在谷歌上搜索了一下 this article。这个人谈论了一大堆概念,我什至不知道 Javascript 中存在这些概念!我对 JS 的了解并没有超出 Javascript 权威指南第 6 版,尽管我确实经常使用 Promisesasync/await(我希望新版的 JS Def Guide 总有一天会出来...)。

那么有没有专家知道一种方法,本质上,"enhance"(即重新设计,而不是扩展)ES2017 中现有的 JS classes?

假设您有一个名为 Original 的 class,它有一个要更新的 render 方法。

class Original {
  render() {
    return 'Original';
  }
}

您可以通过更改 Original 函数原型的 render 方法来更新它,如下所示:

Original.prototype.render = function() {
  return 'Changed';
}

如果你想为你的 class 添加一个新方法,你可以这样做:

Original.prototype.print = function() {
  return 'Printing...';
}

那你就可以照常使用这些方法了

const changed = new Original().render();
const printed = new Original().print();

糟糕...感谢 Dovydas。明明我脑子有问题!

const superObserve = MutationObserver.prototype.observe;
MutationObserver.prototype.observe = function( target, config ){
    console.log( 'blip');
    superObserve.call( this, target, config );
}