gpt4 book ai didi

javascript - "Proper"在Javascript中继承引用值的方式?

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

<分区>

所以,我对 Javascript 很陌生,我正在尝试学习其中的一些 OOP 原则。

我遇到了一个问题。所以,我基本上是在为 HTML Canvas 创建一个场景图,这意味着我需要一个递归结构。每个节点都必须能够包含一个子节点数组。所以,假设我有一个像这样的基本节点对象:

// Shape class (It is part of the BNBeagle namespace)
Shape: function () {
this.children = [];
},

没问题。

然后,我继续为一个小示例游戏创建自己的子类,它可能是这样的:

function PlayerShip() {
// drawShape is a method that's overrided from the Shape class
this.drawShape = function () {
BNBeagle.canvasContext.fillStyle = "#FF0000";
BNBeagle.canvasContext.fillRect(-25, -25, 50, 50);
};
};

PlayerShip.prototype = new BNBeagle.Shape();

我现在面临的问题是,根据我从研究中收集到的信息,当涉及到数组等引用值时,像这样进行原型(prototype)继承会产生问题,我很快发现了这一点。基本上,我发现我所有的 PlayerShip 实例都将共享原型(prototype)中完全相同的“children”数组,这显然不好。

根据我在互联网上找到的内容,解决方案似乎是覆盖子类中的属性,基本上是这样做的:

function PlayerShip() {
this.children = [];

// drawShape is a method that's overrided from the Shape class
this.drawShape = function () {
BNBeagle.canvasContext.fillStyle = "#FF0000";
BNBeagle.canvasContext.fillRect(-25, -25, 50, 50);
};
};

只需为 PlayerShip 添加 children 属性即可。现在,这一切都很好,PlayerShip 的所有实例现在都有自己的数组。但是,我只是想知道是否有更“用户友好”的方式来做到这一点?假设我稍后要发布这个基本框架供公众使用,人们应该如何确切地知道要覆盖哪些属性才能使对象按预期工作?好像有点傻。

我想知道是否有一种方法可以做到这一点而不必让子类覆盖这些类型的引用值? :)

非常感谢!

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