Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 Can';t复制一个3.Vector3_Javascript_Inheritance_Three.js - Fatal编程技术网

Javascript Can';t复制一个3.Vector3

Javascript Can';t复制一个3.Vector3,javascript,inheritance,three.js,Javascript,Inheritance,Three.js,我认为我的问题更多的是javascript继承问题,而不是3.js继承问题 我不太熟悉javascript中的继承,所以经过几次教程之后,我想出了一个方法,但我不明白为什么它没有达到我的预期 var MyClass = function() { THREE.PerspectiveCamera.apply(this, arguments); // Here this.position is default value, (0,0,0) this.position

我认为我的问题更多的是javascript继承问题,而不是3.js继承问题

我不太熟悉javascript中的继承,所以经过几次教程之后,我想出了一个方法,但我不明白为什么它没有达到我的预期

var MyClass = function() {

    THREE.PerspectiveCamera.apply(this, arguments);   

    // Here this.position is default value, (0,0,0)

    this.position = new THREE.Vector3(1,2,3);

    // this.position is unchanged, like if 
    // the previous affectation didn't do anything

}

MyClass.prototype = Object.create(THREE.PerspectiveCamera.prototype);
MyClass.prototype.constructor = MyClass;

var obj = new MyClass();
如果我删除了继承,这就是我期望它做的,并且我不能用三个.js对象以外的东西复制它

也许我遗漏了什么,但我看不出是什么

你有什么想法吗


谢谢大家!

javascript支持继承的方式非常复杂,如果你不想编写几个月后你和你的伙伴都看不懂的代码,那么你应该考虑另一种方法来解决你的问题

我想到了一个包装构造器,大约是3.PerspectiveCamera.prototype:

var MyClass = function () {
    this.perspectiveCamera = new THREE.PerspectiveCamera(arguments);
    this.perspectiveCamera.position = new THREE.Vector3(1, 2, 3);
}

var instance = new MyClass();
这应该能奏效

但是,如果您对原型概念感兴趣,这里有一些好的建议:

  • 将结构实例传递给原型意味着该原型的所有实例都将引用同一个结构实例

  • 您不应该将一个原型设置为另一个原型的实例,因为这最终将包括一些结构(见上文)

  • 最好的方法是迭代旧原型的所有成员(递归地)并将它们克隆到新原型

有关进一步了解的一些链接:


您不能为对象的位置分配新的
3。矢量3
,因为您正在执行以下操作:

this.position = new THREE.Vector3( 1, 2, 3 );
如中所述,Object3D的
位置
旋转
四元数
比例
属性是不可变的。请改用
set()
方法

this.position.set( 1, 2, 3 );

three.js r.71

这是你的问题:Arf,我知道我应该看起来更好。。。非常感谢。但是。。。我的问题与继承无关,是吗?因为这是
这个位置的不变性
。。。也许你应该给我一个答案,这样我就可以接受了。谢谢,很抱歉重复了