有没有一种方法可以扩展ThreeJS对象?

3
我正在使用ThreeJS创建一个交互式界面,人们可以点击方块。但是这些方块在被点击时会有不同的行为(不同的颜色动画,为了简单起见)。
我的想法是创建THREE.Mesh对象的扩展类,并添加自定义函数和属性。这将有助于隔离方块的不同行为并提供更清晰的代码。
我尝试使用John Resigs' function to extend classes,但它似乎只适用于最终扩展他的“Class”类的类。
有没有一种方法可以做到这一点?

你是否尝试过常规的方法,像这样:THREE.Mesh.prototype.your_method = function { } - user377628
@ Hassan 我本来在做那个,但是我的代码变得很混乱。 - PCoelho
1个回答

4

有几种方法可以在JavaScript中创建基于类的系统。John Resig的"Class"是一个很好的选择,但它不是Three.js使用的继承类型。

请注意,在Cube类文件中的这一行:

THREE.Geometry.call( this );

Javascript没有提供内置的类继承模型,因此除非您使用一个库(比如John Resig's)将继承嵌入到类构造中,否则您必须显式地调用super方法。

如果在您的类内部调用以下代码,则会从CubeGeometry继承:

THREE.CubeGeometry.call( this );

您还可能希望将CubeGeometry设置为原型:
THREE.MyCubeGeometry.prototype = new THREE.CubeGeometry();
THREE.MyCubeGeometry.prototype.constructor = THREE.MyCubeGeometry;

好的,我成功地使用了你的想法。我们可以说调用函数的行为类似于其他语言中的“super”吗? - PCoelho
@PCoelho call 只是一种在给定上下文中执行函数的方式。 - jbabey
在JS中没有内置的"super"。"THREE.Geometry"是超级方法,而call()是调用它并注入本地作用域"this"。基于类的东西在JS中似乎有点奇怪,因为它不像其他语言,但它使JS比其他固有基于类的语言更加灵活。 - BishopZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接