js如何实现对变量的属性的更改的可恢复,具体见下图。

clipboard.png

对某个变量myRecord的属性更改后,再调用变量myRecordrollback方法时会放弃对变量myRecord的属性的更改,请问该方法怎么实现呢?

阅读 2.3k
3 个回答

在变量中放一个字段存储上次的结果即可(记得不要保留两者之间的引用关系)
调用rollback时将上次的结果覆盖当前对象。
调用save时对比两次结果,然后进行POSTPUT的操作。

你的意思是更改myRecord的属性后,就调用myRecordrollback方法,调用方法后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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题