变量的所有值所以在我js
代码我有一个改变其值几次一些全局变量,例如获取使用JS
var x = 0;
...
x = 10;
...
x = 5;
是否有可能得到的x
“历史”,但不保存其其他变量的价值?喜欢,是否有一些功能可以检测到在某个时间点x
等于10?
变量的所有值所以在我js
代码我有一个改变其值几次一些全局变量,例如获取使用JS
var x = 0;
...
x = 10;
...
x = 5;
是否有可能得到的x
“历史”,但不保存其其他变量的价值?喜欢,是否有一些功能可以检测到在某个时间点x
等于10?
不,一旦一个值被分配给一个变量,该变量的前一个值被覆盖。它不保留在任何地方。 (如果是的话,这对内存管理来说是一场噩梦。)
如果需要,可以使用setter函数使对象属性保留历史记录;粗糙的例子:
var obj = {
_fooValue: undefined,
fooHistory: [],
set foo(value) {
this.fooHistory.push(this._fooValue);
this._fooValue = value;
},
get foo() {
return this._fooValue;
}
};
obj.foo = 0;
obj.foo = 5;
obj.foo = 42;
console.log(obj.fooHistory);
在这个例子中,历史不包含当前值,仅仅是以前的,它存储在另一个对象属性的当前值,这意味着代码可以绕过二传手。有很多你可以做的调整。如果你认为它是重要的,你可以锁定它更多:
var obj = (function() {
// These two vars are entirely private to the object
var fooHistory = [];
var fooValue;
// The object we'll assign to `obj`
return {
set foo(value) {
fooHistory.push(fooValue);
fooValue = value;
},
get foo() {
return fooValue;
},
get fooHistory() {
// Being really defensive and returning
// a copy
return fooHistory.slice(0);
}
}
})();
obj.foo = 0;
obj.foo = 5;
obj.foo = 42;
console.log(obj.fooHistory);
它如何跳过当前(最后一个)值? –
啊,我明白了,你只是推前一个,而不是当前)) –
@vp_arth:是的。 :-) –
是的,有。在Microsoft Edge浏览器中使用时间旅行调试。检查this了。
我不是JS专家,但作为共同的理念,为任何OOP语言,我建议创建x
特殊类(由Integer在你的榜样继承),这已经重写setter和一些历史数组列表。所以,当你设置一个新的值时,它会存储在你的历史记录中。
您只需要更改变量类型,而不是代码,该代码适用于该类型。我也不认为有任何语言的标准解决方案。可能是一些动态的introspectors,但这些会比我的想法更加复杂。
您可以使用像数组这样的变量,并将下一个值移到这个数组中。并使用它采取第一个元素:
var x = [];
...
x.unshift(10);
...
x.unshift(5);
var currentX = x[0];
var allValues = x;
你有什么相关的谷歌? –
没有使用历史数组变量我没有看到这个工作伙伴 - 当然我可能是错的。 – Terrance00
nope,我试过但没有成功 – Coffee