Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript/ThreeJS类型错误:无法读取属性';设置';未定义的_Javascript_Three.js - Fatal编程技术网

JavaScript/ThreeJS类型错误:无法读取属性';设置';未定义的

JavaScript/ThreeJS类型错误:无法读取属性';设置';未定义的,javascript,three.js,Javascript,Three.js,我正在尝试使用名为Model的三个js创建一个自定义对象,它由我定义的其他自定义对象组成,例如Part。这就是我得到错误的地方: const Model = function() { this.mesh = new THREE.Object3D(); this.mesh.name = 'model'; //creates instance of part this.lowerPart = new Part(); this.lowerP

我正在尝试使用名为
Model
的三个js创建一个自定义对象,它由我定义的其他自定义对象组成,例如
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)

下面是我基本上是如何定义
部分的:

 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.lowerPart
部分的一个实例

我已经查看并尝试了与我的问题相关的大多数建议的StackOverflow问题。在所有这些中,这似乎是最相关的: 然而,这对我不起作用


任何关于如何解决我的问题的建议都将不胜感激

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


只有这样,才能通过
零件的实例访问
位置
旋转
缩放
等属性

谢谢您的回复!不幸的是,当我添加这个时,它给了我一个错误:
THREE.Object3D.add:object不是THREE.Object3D的实例。
我想它可能是指我在
Model=newmodel()中调用我的
Model
函数的地方但是它没有给出错误发生的确切位置。我还看到我在添加
THREE.Object3D.call(this)的地方得到了另一个错误
表示
TypeError:无法设置未定义的属性“uuid”
是否有机会将您的代码共享为一个?在这种情况下,当社区可以调试您的问题时,提供帮助会容易得多。是的,我刚刚添加了它:我是JSFIDLE新手,所以我不确定如何将JS文件附加到HTML,但我现在掌握的是我程序的基础知识。好吧,我想您的回答确实解决了我的问题!我想问题是我制作了一个
模型的实例,我需要它是一个函数,而不是我的例子中的变量。谢谢你的帮助!
THREE.Object3D.call( this );