2012-06-12 223 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

相關問題