gpt4 book ai didi

javascript - 继承自2个对象

转载 作者:行者123 更新时间:2023-11-30 06:29:10 25 4
gpt4 key购买 nike

我对 Object.create 的对象继承有疑问。

我有两个对象,它们的行为应该像接口(interface)一样。 Object3DLightObject3D 在 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;
})();

现在,我想要另外两个对象,它们将是“类”。第一个是 AmbientLightAmbientLight 没有位置,因为它到处发光。所以它继承自Light。另一个是 PointLightPointLightLight,但它也有位置,因为它不会到处发光。它有一定的范围。所以它也应该继承自 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;
})();

最佳答案

您的想法完全正确。只需在设置原型(prototype)的位置将两个对象合并在一起:

PointLight.prototype = Object.create(Light.prototype);
var obj3D = Object.create(Object3D.prototype);

for (var key in obj3D) {
if (obj3D.hasOwnProperty(key)) {
PointLight.prototype.key = obj3D.key;
}
}

当然,在处理多重继承时,您会遇到所有常见的丑陋问题 - 也就是说,如果您在两个对象中有任何成员具有相同的名称,则 Object3D 成员将覆盖Light 成员。

关于javascript - 继承自2个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19008974/

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