2012-06-12 276 views
2

我使用ThreeJS创建一个人们可以点击多维数据集的交互。然而,这些立方体在点击时表现不同(不同的颜色动画,以保持简单)。有没有办法扩展ThreeJS对象?

我的想法是创建THREE.Mesh对象的扩展类并添加我的自定义函数和属性。这将有助于隔离立方体的不同行为并提供更简洁的代码。

我试过使用John Resigs' function to extend classes,但它似乎只适用于最终扩展他的“Class”类的类。

有没有办法做到这一点?

+0

您是否尝试过这样做常规方式,如:'THREE.Mesh.prototype.your_method = function {}'? – Hassan

+0

@Hassan我正在这样做,但后来通过代码变得混乱。 – PCoelho

回答

3

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

注意在the Cube class file行:

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; 
+0

好吧,我设法使你的想法工作。我们可以说,调用函数的行为像其他语言中的“超级”一样吗? – PCoelho

+0

@PCoelho'call'只是从给定的上下文中执行函数的一种方式 – jbabey

+0

JS中没有内置的“超级”。 “THREE.Geometry”是超级方法,call()调用它并注入本地作用域“this”。基于类的东西在JS中似乎有点奇怪,因为它不像其他语言,但它使得JS比其他固有的基于类的语言更加灵活。 – BishopZ

相关问题