Dan*_*son 5 javascript design-patterns three.js
我想知道为什么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...
Run Code Online (Sandbox Code Playgroud)
我想知道他们为什么在当前构造函数中调用基础构造函数以及原型?
在MDN中,它们显示如下模式:
subType = function(){
//new properties for subType
}
subType.prototype = new baseType();
Run Code Online (Sandbox Code Playgroud)
它们没有在subType构造函数中调用基础构造函数,那么为什么THREE.js会这样做呢?
由于每个THREE.Object3D实例都继承自THREE.Object3D.prototype,通过THREE.Camera.prototype这种方式设置,每个THREE.Camera实例也将继承自THREE.Object3D.prototype.
如果不这样做,THREE.Camera实例将不会继承分配给的任何属性THREE.Object3D.prototype.
所以,这两个部分都很重要:
通过THREE.Camera.prototype适当设置,新实例将继承,THREE.Object3D.prototype并且所有实例共享这些属性.
通过调用"父"构造函数,您将使用特定于实例的数据初始化每个实例.
也就是说,像这样设置原型并不是最好的方法.如果THREE.Object3D期望参数没有它,构造函数将不起作用怎么办?
更好的方法是创建一个继承自的空对象THREE.Object3D.prototype,因为这就是您所需要的:
THREE.Camera.prototype = Object.create(THREE.Object3D.prototype);
THREE.Camera.prototype.constructor = THREE.Camera;
Run Code Online (Sandbox Code Playgroud)
参考: Object.create
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |