Javascript 如何从对象临时借用/添加功能?有什么设计模式吗?

Javascript 如何从对象临时借用/添加功能?有什么设计模式吗?,javascript,oop,design-patterns,object,Javascript,Oop,Design Patterns,Object,我有一个列表对象-节点列表。我想向用户提供“就地分拣/订购”。用户可以将任何项目放在列表中的任何位置。是否有一种设计模式,我将整个行为作为一个包(作为一个对象或任何东西)保存,并可以在需要排序模式时临时借用它 我正在用Javascript做这件事 我想到了decorator,但我需要更改原始对象的属性。我觉得这样做不对。假设Decorator在不修改原始对象的情况下添加功能 新详情: 我有一个更好的类比来说明我正在尝试做什么。让我们考虑一个游戏角色。角色一直活到游戏结束。角色可以扮演一些角色。角

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

我正在用Javascript做这件事

我想到了decorator,但我需要更改原始对象的属性。我觉得这样做不对。假设Decorator在不修改原始对象的情况下添加功能

新详情:

我有一个更好的类比来说明我正在尝试做什么。让我们考虑一个游戏角色。角色一直活到游戏结束。角色可以扮演一些角色。角色可以改变角色的永久属性。角色可以在一次或多次扮演一个或多个角色。我将如何组织节目中的“角色”和“角色”


如果角色就像角色的装饰者,那么在角色中修改角色的私有属性是一种好的做法吗?还有其他方法吗?

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

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

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

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

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

请注意,您实际上不需要更改原始对象。您的节点对象看起来应该非常简单:

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;
}

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

您可以发布您的代码吗?您不能只将属性附加到贷方对象的
原型
,然后再
lenderObj.sort.call(lowerobj)
?@elclars我有列表。排序仍处于概念阶段。我有一个对象,它需要在整个应用程序中保持活动状态。我需要一个可以更改原始对象属性的分类器(或任何其他处理器),但我希望在运行时根据用户请求绑定该行为,而不是将其作为对象或其扩展的一部分提供。@glortho这就是我计划的。这意味着,借贷者对象实际上知道借贷者对象的所有内部工作,但与该对象没有真正的关系。我不确定这是不是一个好的设计。此外,这更像是根据用户的需要一步一步地重新排序,而不是标准排序。我已经添加了一个更好的类比,来说明我试图对列表执行的操作。