Javascript 有没有办法扩展ThreeJS对象?

Javascript 有没有办法扩展ThreeJS对象?,javascript,oop,inheritance,three.js,Javascript,Oop,Inheritance,Three.js,我正在使用ThreeJS创建一个交互,人们可以在其中单击立方体。但是,这些立方体在单击时表现不同(不同颜色的动画,以保持想法简单) 我的想法是创建THREE.Mesh对象的扩展类,并添加自定义函数和属性。这将有助于隔离多维数据集的不同行为,并提供更清晰的代码 我尝试使用,但它似乎只适用于最终扩展了他的“类”类的类 有办法做到这一点吗?有几种方法可以在Javascript中创建基于类的系统。John Resig的“类”很好,但它不是Three.js使用的继承类型 请注意: THREE.Geomet

我正在使用ThreeJS创建一个交互,人们可以在其中单击立方体。但是,这些立方体在单击时表现不同(不同颜色的动画,以保持想法简单)

我的想法是创建THREE.Mesh对象的扩展类,并添加自定义函数和属性。这将有助于隔离多维数据集的不同行为,并提供更清晰的代码

我尝试使用,但它似乎只适用于最终扩展了他的“类”类的类


有办法做到这一点吗?

有几种方法可以在Javascript中创建基于类的系统。John Resig的“类”很好,但它不是Three.js使用的继承类型

请注意:

THREE.Geometry.call( this );
Javascript不提供类继承的内置模型,因此除非您使用将继承烘焙到类构造中的库(如John Resig),否则必须显式调用超级方法

如果在类中调用以下命令,则类将继承CubeGeometry:

THREE.CubeGeometry.call( this );
您可能还希望将CubeGeometry设置为原型:

THREE.MyCubeGeometry.prototype = new THREE.CubeGeometry();
THREE.MyCubeGeometry.prototype.constructor = THREE.MyCubeGeometry;

你有没有试过用常规的方法,比如:
THREE.Mesh.prototype.your_method=function{}
?@Hassan我当时是这样做的,但后来代码变得混乱了。好吧,我用你的想法成功了。我们可以说调用函数的行为类似于其他语言中的“super”吗?@PCoelho
call
只是从给定上下文执行函数的一种方式。JS中没有内置的“super”。“THREE.Geometry”是超级方法,call()调用它并注入局部作用域“this”。基于类的东西在JS中似乎有点奇怪,因为它不像其他语言,但它使JS比其他固有的基于类的语言灵活得多。