【发布时间】:2017-08-25 02:04:03
【问题描述】:
这就是我想做的:
我有一个存储状态的对象以及之前状态的数组。
var object = { currentState: [Object], previousStates: [[Object], [Object]] };
当状态发生变化时,我想将当前状态对象的引用存储在以前的状态数组中,以便可以重用,然后创建一个新状态(或重用旧状态)并将其存储在 currentState 中而不更改原始对象传递给数组。如果它有任何区别,状态就是实例化的类对象。
这可能吗?
我查看了很多关于按引用传递和按值传递的资源,但我认为我需要在示例的上下文中对其进行解释。哪个示例将在 currentState 中存储一个新状态而不更改之前推送到数组的值?
function changeState1(states) {
states.previousStates.push(states.currentState);
states.currentState = new State();
}
function changeState2(states) {
var newState = new State();
states.previousStates.push(states.currentState);
states.currentState = newState;
}
编辑:
我可能应该提到我的目的是创建高效的代码。如果我可以重用旧实例,我不想动态地从类中重新创建状态。更利于内存使用,减少垃圾回收。
【问题讨论】:
-
“通过引用传递和按值传递的资源” JavaScript 是 按值传递。对象被表示为 引用的事实与传递 by 引用无关。 按值/引用传递描述了绑定(即变量和参数)而不是值之间的关系。请参阅en.wikipedia.org/wiki/Evaluation_strategy 了解更多信息。
-
@FelixKling 是的,我在各处都看到过多次提到这一点,但我对语义不感兴趣。我只是想知道我想编写的代码是否可以在 JavaScript 中实现
-
我不确定我是否理解您想要达到的目标。一个具体的例子会有所帮助。 “但我对语义不感兴趣”好吧,了解正确的语义将帮助您不浪费时间搜索不相关的信息,或误导那些想要帮助您的人。
-
@FelixKling 我添加了一个示例,说明我可以采取哪些措施来解决问题。你是对的语义。我只是觉得这一切都很混乱。
-
我同意它可能会造成混淆,这就是为什么我认为正确使用语义更为重要:) 您的示例将按照您希望的方式工作。
标签: javascript arrays pass-by-reference javascript-objects pass-by-value