我有一个关于使用 Object.create 进行对象继承的问题。
我有两个对象,它们的行为应该像接口。Object3D
和Light
。Object3D
在 3D 空间中呈现真实物体。它在空间中有它的位置,它应该有一些功能来改变这个位置。Light
是发光的一切。每一盏灯都有它的颜色。
// I have resons to use iif, dont bother with that ;)
var Object3D = (function() {
var Object3D = function() {
this.position = vec3.create();
};
return Object3D;
})();
var Light = (function() {
var Light = function() {
this.color = new Array(4);
};
return Light;
})();
现在,我想要另外两个对象,它们将是“类”。第一个是AmbientLight
. AmbientLight
没有位置,因为它只是到处发光。所以它继承自Light
. 另一种是PointLight
。PointLight
是Light
,但它也有位置,因为它不会到处发光。它有一些范围。所以它也应该继承自Object3D
. 我该怎么做?我可以合并来自 Object.create 的结果吗?
var AmbientLight = (function() {
var AmbientLight = function() {
Light.call(this);
};
AmbientLight.prototype = Object.create(Light.prototype);
return AmbientLight;
})();
var PointLight = (function() {
var PointLight = function() {
Light.call(this);
Object3D.call(this);
this.range = 10.0;
};
// this isnt correct
// how to make it correct?
PointLight.prototype = Object.create(Light.prototype);
PointLight.prototype = Object.create(Object3D.prototype);
return PointLight;
})();