JavaScript / ThreeJS TypeError:无法读取未定义的属性“ set”

时间:2019-02-08 06:38:14

标签: javascript three.js

我正在尝试使用名为Model的ThreeJS创建一个自定义对象,该对象由我定义的其他自定义对象组成,例如Part。这是我得到错误的地方:

const Model = function() {
      this.mesh = new THREE.Object3D();
      this.mesh.name = 'model';

      //creates instance of part
      this.lowerPart = new Part();
      this.lowerPart.position.set(1, 2, 3, -75);  //TypeError here
      this.lowerPart.rotation.set(0, 0, 0);
      this.mesh.add(this.lowerPart);
}

但是,当我运行程序时,它说它无法读取未定义的属性“ set”,并引用了this.lowerPart.position.set(1, 2, 3, -75);

这是我基本定义Part的方式:

 const Part = function () {
      this.mesh = new THREE.Object3D();
      this.mesh.name = 'part';

      const partShape = new THREE.Shape();
      partShape.lineTo( 40, 80 );
      partShape.lineTo( 60, 80 );
      partShape.lineTo( 60, 100 );
      partShape.lineTo( 40, 100 );

      //extrude settings defined....

      const partGeometry = new THREE.ExtrudeGeometry(partShape, extrudeSettings);
      const partMesh = new THREE.Mesh(partGeometry, new THREE.MeshStandardMaterial({
        color: 0x1c4bc9,
        flatShading: true
      }));
      this.mesh.add(partMesh);
    };
    Part.prototype = Object.create(THREE.Object3D.prototype);
    Part.prototype.constructor = Part;

函数Model中要注意的另一件事是,创建this.lowerPart时,它被标记为未使用。我不确定原因,因为它是具有这些属性的Object3D类型。

控制台还证明this.lowerPartPart的实例。

我已经查看并尝试了与我的问题有关的大多数建议的StackOverflow问题。在所有这些中,这似乎是最相关的:Uncaught TypeError: Cannot read property 'set' of undefined 但是,它对我不起作用。

任何有关如何解决问题的建议,将不胜感激!

1 个答案:

答案 0 :(得分:1)

如果要从Part派生THREE.Object,还必须在Part的构造函数中执行以下代码行(它应该是ctor中的第一行) :

THREE.Object3D.call( this );

只有这样,才可以使用position的实例访问rotationscalePart之类的属性。