gpt4 book ai didi

javascript - three.js继承模式

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:45 26 4
gpt4 key购买 nike

我想知道为什么three.js的代码结构是这样的:

THREE.Camera = function(){
THREE.Object3D.call(this);
//add more Camera specific properties and methods
}

THREE.Camera.prototype = new THREE.Object3D();
THREE.Camera.prototype.constructor = THREE.Camera;

THREE.Camera.prototype.//add more camera specific methods...

我想知道为什么他们在当前构造函数中调用基础构造函数并且还为原型(prototype)调用?

在 MDN 中,它们显示了这样的模式:

subType = function(){
//new properties for subType
}

subType.prototype = new baseType();

他们没有在子类型构造函数中调用基类构造函数,那THREE.js为什么要这样做呢?

最佳答案

由于每个 THREE.Object3D 实例都继承自 THREE.Object3D.prototype,通过这样设置 THREE.Camera.prototype,每个 code>THREE.Camera 实例也将继承自 THREE.Object3D.prototype

如果您不这样做,THREE.Camera 实例将不会继承分配给 THREE.Object3D.prototype 的任何属性。

所以,这两部分都很重要:

  • 通过适本地设置 THREE.Camera.prototype,新实例将从 THREE.Object3D.prototype 继承,并且这些属性是共享的 在所有情况下。

  • 通过调用“父”构造函数,您可以使用实例特定 数据初始化每个实例。


也就是说,像这样设置原型(prototype)并不是最好的方法。如果 THREE.Object3D 需要参数,没有这些参数构造函数将无法工作怎么办?

更好的方法是创建一个继承自 THREE.Object3D.prototype 的空对象,因为这就是您所需要的:

THREE.Camera.prototype = Object.create(THREE.Object3D.prototype);
THREE.Camera.prototype.constructor = THREE.Camera;

引用: Object.create

关于javascript - three.js继承模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11101378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com