我想在没有extends关键字的es6类中进行继承:
典型方法:
class Foo extends Bar {
contructor() {
...
}
}我正在寻找的是生成一个具有相同签名但使用以下模式的对象:
class Foo {
contructor(Bar) {
// use Bar class somehow
...
}
}谢谢
==编辑==
上下文:
我为JS库threejs构建了一个扩展(ami)。它提供了在threejs中无缝工作的新对象。
问题:
threejs有一个内部机制来为每个对象生成唯一的is,这对于它的正确行为至关重要。
当前的实现依赖于将three公开为全局变量,因此任何创建对象的人都必须引用它以确保ids实际上是唯一的。
// 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();但是我不知道如何实现这个解决方案。
发布于 2018-06-14 05:57:01
这个答案解决了最初提出的问题,并且足够好地帮助操作员改进问题并立即获得支持。如果你没有仅仅因为球门柱移动而否决它,我将不胜感激。
假设你没有疯,这是一个学习练习,学习如何实现它的最好方法是获得Typescript,使用extends编写一个类,以ES5为目标编译它,并查看生成的JavaScript。确保基类具有方法、属性、静态方法、静态属性以及具有混合必需和可选参数的构造函数。然后从它派生另一个类,覆盖一些方法并替换一些方法。你会看到那些认真对待它的人是如何做到的。
https://stackoverflow.com/questions/50846735
复制相似问题