鍍金池/ 問答/HTML/ js如何實(shí)現(xiàn)對(duì)變量的屬性的更改的可恢復(fù),具體見下圖。

js如何實(shí)現(xiàn)對(duì)變量的屬性的更改的可恢復(fù),具體見下圖。

clipboard.png

對(duì)某個(gè)變量myRecord的屬性更改后,再調(diào)用變量myRecordrollback方法時(shí)會(huì)放棄對(duì)變量myRecord的屬性的更改,請(qǐng)問該方法怎么實(shí)現(xiàn)呢?

回答
編輯回答
任她鬧

下面通過Object.defineProperty做的一個(gè)簡(jiǎn)單實(shí)現(xiàn),供你參考:

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


將會(huì)輸出

abc
123
abc
def
def
2017年3月2日 19:42
編輯回答
扯機(jī)薄

你的意思是更改myRecord的屬性后,就調(diào)用myRecordrollback方法,調(diào)用方法后myRecord的變量值重置?

2018年4月21日 19:29
編輯回答
初念

在變量中放一個(gè)字段存儲(chǔ)上次的結(jié)果即可(記得不要保留兩者之間的引用關(guān)系)
調(diào)用rollback時(shí)將上次的結(jié)果覆蓋當(dāng)前對(duì)象。
調(diào)用save時(shí)對(duì)比兩次結(jié)果,然后進(jìn)行POST、PUT的操作。

2017年11月5日 22:15