以编程方式扩展 es6 类

Mik*_*gin 5 javascript ecmascript-6

使用标准 es5 我有这个方法,它允许我将方法添加到我的库的原型链中(它允许扩展核心库以及附加到库的任何组件):

 library.extend = function(extendId, extendObj) {
        //if it's an extension of the core library object...
        if(extendId === 'library') {
            library.prototype[extendObj.name] = extendObj.func;
        } else {
            library.component[extendId].prototype[extendObj.name] = extendObj;
        }
 }; 
Run Code Online (Sandbox Code Playgroud)

用法是:

 /* create some new class */
 var somecomponent = function() {}
 somecomponent.protoype.somemethod = function() {}

/* extend the base libraries prototype chain with the new class*/
library.extend('library', somecomponent)
Run Code Online (Sandbox Code Playgroud)

在 es6 类中,我们也有原型,但它们被类语法屏蔽,您应该使用该方法向类添加方法extends

因此,我不确定如何使用与上面类似的方法以编程方式向 es6 类添加方法。

Ber*_*rgi 2

在 es6 类中,我们也有原型,但它们被类语法屏蔽,您应该使用关键字向类添加方法extends

我不确定你所说的“蒙面”是什么意思。是的,它的语法不同,但结果完全相同 -class创建一个带有属性的构造函数.prototype。因此,虽然extends语法当然更容易编写,但您不能以编程方式使用它。请注意,它extends用于子类化,而不是用于现有类的扩展,因此它无论如何都不适合您的需要。

我不确定如何使用与上面类似的方法以编程方式向 ES6 类添加方法。

只需继续使用您已有的方法即可。以这种风格进行 mixin 是完全可以的。