gpt4 book ai didi

javascript - 如何临时从/向对象借用/添加功能?任何设计模式?

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

我有一个列表对象——节点列表。我想向用户提供“就地排序/排序”。用户可以将任何项目放在列表中的任何位置。是否有一种设计模式可以让我将整个行为作为一个包(作为一个对象或其他)保存,并且可以在需要排序模式时临时借用它?

我正在用 Javascript 做这件事。

我想到了装饰器,但我需要改变原始对象的属性。感觉这不是正确的方法。装饰器应该在不修改原始对象的情况下添加功能。

新细节:

对于我正在尝试做的事情,我有一个更好的类比。让我们想想一个游戏 Angular 色。 Angular 色一直活到游戏结束。 Angular 色可以承担一些 Angular 色。 Angular 色可以改变 Angular 色的属性,这是永久性的。 Angular 色可以一次或多次扮演一个或多个 Angular 色。我将如何构建程序中的“Angular 色”和“Angular 色”。

如果 Role 就像是 Character 的装饰器,那么在 Role 中修改 Character 的私有(private)属性是否是一个好习惯?还有其他办法吗?

最佳答案

作为一般方法,您可以使用链表。对于每个节点,您希望保留其后的节点。您还想保留第一个节点的引用。

  • 当用户将节点A移动到第一个节点和最后一个节点之间的某个位置时,找到节点A下方的节点(节点B),然后将节点B设置为节点A的下一个节点。

  • 如果用户将一个节点移动到列表的末尾,则将下一个节点设置为null

  • 如果用户将节点移动到列表的开头,则更新第一个节点引用。

最后,当用户保存更改时,使用第一个节点的递归函数来创建项目的有序列表。

请注意,您实际上不需要更改原始对象。您的 Node 对象应该看起来像这样简单:

function Node(item, nextNode) {
this.item = item;
this.nextNode = nextNode;
}

Node.prototype.getItem = function () {
return this.item;
};

Node.prototype.getNextNode = function () {
return this.nextNode;
};

Node.prototype.setNextNode = function (node) {
this.nextNode = node;
}

item 属性可以保存您的原始对象。

关于javascript - 如何临时从/向对象借用/添加功能?任何设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392613/

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