我想在没有extends
关键字的es6课程中继承:
典型方法:
class Foo extends Bar {
contructor() {
...
}
}
我正在寻找的是生成具有相同签名但使用此模式的对象:
class Foo {
contructor(Bar) {
// use Bar class somehow
...
}
}
由于
== EDITS ==
上下文:
我为JS库ami
构建扩展(threejs
)。
它提供了在threejs
中无缝工作的新对象。
问题:
threejs
有一个内部机制,可以为每个对象生成唯一的ID,这对于它的正常行为至关重要。
当前实现依赖于three
作为全局变量公开,因此创建对象的任何人都必须引用它以确保id实际上是唯一的。
// in ami
// ID of this object will be unique accros all classes
// that are based of global THREE.Mesh
class Foo extends THREE.Mesh {
contructor() {
...
}
}
使用全局变量工作正常,但我想摆脱全局命名空间要求。
如果我在ami
和我的应用程序中没有引用相同的基本元素,则id可能会发生冲突。
// in ami
import {Mesh} from 'three';
class Foo extends Mesh {
contructor() {
...
}
}
// in my app
import {Foo} from 'ami';
imoport {Mesh} from 'three';
const foo = new Foo(); // it uses "Mesh" from ami as a base.
const mesh = new Mesh(); // it uses current "Mesh" as a base.
// IDs will conflict...
一个可行的解决方案是我在ami
构造函数中提供一个新参数,以提供three
引用:
// in ami
class Foo {
contructor(mesh) {
...
}
}
// in my app
imoport {Mesh} from 'three';
import {Foo} from 'ami';
const foo = new Foo(Mesh);
const mesh = new Mesh();
但我不知道如何实施这个解决方案。
答案 0 :(得分:0)
这个答案解决了最初提出的问题,并且足以帮助OP改进问题并立即获得赞成。如果你因为球门柱已经移动而没有进行投票,我会很感激。
假设你并不疯狂,这是一个学习练习,学习如何实现这个的最好方法是获取Typescript,使用extends编写一个类,使用ES5作为目标编译它,然后查看生成的JavaScript 。确保您的基类具有方法,属性,静态方法,静态属性以及具有混合必需参数和可选参数的构造函数。然后从中派生另一个类并重写一些方法并替换一些。你会看到那些认真对待它的人是如何做到的。