【发布时间】:2019-06-06 19:17:27
【问题描述】:
如何在 js es6 中轻松实现一种混合或扩展动态多类继承?
// 这里的示例我有 3 个类,但它们需要从上下文扩展。
class Type1 { constructor() {} };
class Type2 { constructor() {} };
class Type3 { constructor() {} };
// 这里我有其他类继承但不需要上下文。
/** return dynamically a class*/
function dynamically_Extends(extendsType) {
switch (extendsType) {
case 'type1': return Type1 ;break;
case 'type2': return Type2 ;break;
case 'type3': return Type3 ;break;
default: console.error('class not exist') ;break;
};
};
class AA {
constructor(type) {
//not work: example of extend during constructor?
extends dynamically_Extends(type);
super()
};
};
class A extends AA{
constructor(type) {
super(type)
};
};
当我创建对象时我希望它有这样的东西
const obj1 = new A('type1'); // class heritance: A=>AA=>type1
const obj2 = new A('type2'); // class heritance: A=>AA=>type2
const obj3 = new A('type3'); // class heritance: A=>AA=>type3
我想第二次扩展A,但根据条件使用动态上下文。
在构造函数期间或之后执行此操作的任何提示或简单方法?
我想为所有事情保留类糖代码。
【问题讨论】:
-
我认为您必须将类移动到 dynamic_Extends 以避免语法错误。构造函数可以定义为 dynamic_Extends 内部的函数,但在类外部,因此所有三个类都可以使用相同的代码。
-
你的用例是什么?是什么让你远离 ``type === "type1" ?新 A() : 新 B()` ?
-
A 将是
[containerSpriteSheets,containerSpineSheets,containerAnimationSheets]扩展baseContainer并在需要上下文时动态扩展[dataTypeDoor,dataTypeCase,dataTypeChara,dataTypeTree,dataTypeLight....]
标签: javascript dynamic ecmascript-6 extends es6-class