对某个变量myRecord
的属性更改后,再调用变量myRecord
的rollback
方法时会放弃对变量myRecord
的属性的更改,请问该方法怎么实现呢?
对某个变量myRecord
的属性更改后,再调用变量myRecord
的rollback
方法时会放弃对变量myRecord
的属性的更改,请问该方法怎么实现呢?
下面通过Object.defineProperty做的一个简单实现,供你参考:
var obj = {
rollback:function(){
if(this['old_value'])
this.value = this['old_value'];
},
save:function(){
delete this['old_value'];
}
}
Object.defineProperty(obj, "name",{
set:function(newVal){
this['old_value'] = this.value;
this.value = newVal;
},
get:function(){
return this.value;
}
})
obj.name="abc";
console.log(obj.name) //输出abc
obj.name="123";
console.log(obj.name) //输出123
obj.rollback()
console.log(obj.name) //输出abc
obj.name="def";
console.log(obj.name) //输出def
obj.save()
console.log(obj.name) //输出def
将会输出
abc
123
abc
def
def
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答873 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
在变量中放一个字段存储上次的结果即可(记得不要保留两者之间的引用关系)
调用
rollback
时将上次的结果覆盖当前对象。调用
save
时对比两次结果,然后进行POST
、PUT
的操作。