我创建了一个构造函数,它有一个修改一堆局部变量的方法。我的问题是该方法可能会引发一些错误,因此当发生错误时我想将范围恢复到之前的状态。显然,我可以创建一堆临时变量,然后将它们分配给构造函数实际使用的变量,但这并不是真正的最佳解决方案。我想知道是否有任何方法可以修改方法中的变量,并在发生错误时将它们恢复到调用方法之前的状态。
最佳答案
除了全局作用域之外,没有真正的方法可以与 JavaScript 中的作用域进行交互。不过,您可以创建充当作用域的对象。
demo
function Scope(data){
this.data = data;
this.stages = [];
this.save(data);
}
Scope.prototype.save = function(){
var oldData = JSON.parse(JSON.stringify(this.data));
this.stages.push(oldData);
}
Scope.prototype.undo = function(){
var lastData = this.stages.pop();
this.data = lastData;
}
然后我们可以使用一些数据创建一个范围。
var scope = new Scope({name: "John"});
现在,我们有一个奇怪的功能,对名叫 Paul 的人提供高度优惠的待遇。
function myFunction(data) {
if (data.name === "John") {
data.name = "Paul";
throw new Error("I don't like John!");
}
}
然后我们可以在 try/catch 中调用我们的函数。
try {
myFunction(scope.data);
}
catch (e) {
// scope.data is {name: "Paul"}
scope.undo();
// scope.data is {name: "John"}
}
关于javascript - 出错时撤消对构造函数范围的修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18222670/