Я хочу расширить класс Object3D класса Three.js, но не могу понять, как это сделать.Расширение классов Three.js
Этот вопрос, который я прочитал, перечитал и попробовал, но не могу заставить его работать для меня.
Is there a way to extend a ThreeJS object?
Может кто-нибудь предложить некоторую конкретную коду о том, как получить это происходит? Вот что у меня есть на данный момент:
var MyObject3D = function() {
THREE.Object3D.call(this);
MyObject3D.prototype = new THREE.CubeGeometry();
MyObject3D.prototype.constructor = MyObject3D;
}
И для создания экземпляра:
var thing = new MyObject3D();
var testGeo = new THREE.CubeGeometry(10, 10, 10);
var testMat = new THREE.MeshPhongMaterial();
var testMesh = new THREE.Mesh(testGeo, testMat);
thing.add(testMesh);
Но называть «добавить» метод MyObject3D экземпляра возвращает ошибку, что «вещь» не имеет какого-либо метода " Добавить."
В чем дело?
Вы !! CubeGeometry вещь была просто ошибкой копирования/вставки, когда я создал вопрос, но вы все еще решили мою проблему :) Я устанавливал прототип нового класса внутри функции конструктора. Перемещение за пределы зафиксировано. Мне любопытно, почему это изменило бы ситуацию. (Возможно, вы заметили, что я все еще изучаю OO в Javascript.) – John
Прототип применяется к экземпляру объекта до запуска конструктора, поэтому, когда вы устанавливали MyObject3D.prototype в конструкторе, это не вступает в силу для первого объект, созданный с помощью этого конструктора. Однако после того, как конструктор запустится один раз, прототип изменился бы, поэтому все будущие объекты этого типа будут иметь прототипы, которые выглядели так, как вы хотели. (Все они были бы немного разными, потому что вы создавали новый объект для каждого!) – IceCreamYou
Я действительно понимаю, что, как ни странно. Благодаря!! – John