在这里,我想将Data的所有属性重置为原始值,我是如何做到的?
var Data = {
prop1: false,
prop2: true,
prop3: null
}
Some code executes & sets Data.prop1 = "abc";
我从未实例化数据,这是一个问题吗?
答案 0 :(得分:13)
Data
是dynamic
个对象。您可以添加一个将重置所有值的函数:
var Data = {
prop1: false,
prop2: true,
prop3: null,
reset: function () {
this.prop1 = false;
this.prop2 = true;
this.prop3 = null;
}
}
答案 1 :(得分:7)
另一种方法是:
var Data = {
prop1: false,
prop2: true,
prop3: null,
// save initial values
init: function() {
var origValues = {};
for (var prop in this) {
if (this.hasOwnProperty(prop) && prop != "origValues") {
origValues[prop] = this[prop];
}
}
this.origValues = origValues;
},
// restore initial values
reset: function() {
for (var prop in this.origValues) {
this[prop] = this.origValues[prop];
}
}
}
然后,当您使用它时,在初始化代码中调用Data.init()
以保存当前值,以便稍后使用Data.reset()
恢复它们。这具有维护更容易的优点。当您向数据结构添加或更改变量时,它会自动合并到重置功能中,而无需您进行任何特定更改。
你可以在这里看到它:http://jsfiddle.net/jfriend00/EtWfn/。
答案 2 :(得分:3)
避免必须复制所有默认值的最简单方法是使用更传统的构造函数并从那里实例化Data对象。然后,当您需要重置时,您可以丢弃旧对象并实例化一个新对象。
注意:在下面的代码中,我使用了JS约定,那些用作对象构造函数的函数以大写字母开头,引用实例的变量以小写字母开头。
function Data() {
this.prop1 = false;
this.prop2 = true;
this.prop3 = null;
}
var data = new Data();
data.prop1 = "abc"; // change some properties of data
data.prop3 = "something else";
data = new Data(); // "reset" by getting a new instance
如果您不喜欢使用“new”,您可以编写一个返回对象的非构造函数样式函数:
function getData() {
return {
prop1: false,
prop2: true,
prop3: null
};
}
var data = getData();
data.prop1 = "abc";
data = getData(); // reset
如果由于某种原因你需要重置以保持相同的实际实例而不是获得一个新的相同的实例,那么你将需要根据Frits van Campen的答案逐个更改属性(你还需要添加一些代码删除在此过程中添加的任何额外属性。
答案 3 :(得分:2)
更优雅的方法是复制默认值而不会丢失引用:
{{1}}
如前所述,如果是这种情况,您仍需要删除稍后添加的属性。
答案 4 :(得分:1)
试试:
var Data = {
prop1: false,
prop2: true,
prop3: null
}
var DataOriginal = {
prop1: false,
prop2: true,
prop3: null
}
Data.prop1 = 'abc';
Data = DataOriginal;
答案 5 :(得分:0)
听起来很简单。这对你有用吗?
// after the Data structure is defined copy it to another variable
var OriginalData = Data;
// When you need to reset your Data to the Original values
Data = OriginalData;