利用Object.defineProperty 簡化 Chrome插件本地存儲操作
阿新 • • 發佈:2019-03-28
默認值 取值 lba 數據對象 return clas wal 內部 -c
通常谷歌插件本地存儲寫法很別扭?,如
chrome.storage.sync.get(null,function(data){ //todo console.log(data); });如果get後需要判斷內部值時,則需要套住todo代碼,使得代碼臃腫
本地存儲的set方法還算方便,如
chrome.storage.sync.set(data)
但是每次取值時都要寫一大段get語句?,操作起來很是不便
SO,我要簡化它??,通過簡單的學習得到下面那段方法
先!!!,看一下調用方法??
options.yuedu = ‘close‘;//這裏實際上已為chrome本地數據更新
以下方法僅操作options即可
//初始化數據對象 var options = { yuedu: ‘open‘, bg_img: null, }; //通過chrome原生api訪問本地存儲數據 chrome.storage.sync.get(null, function (data) { //若初次加載屬性則賦默認值 $.extend(options, data); //原生chrome api 設置本地存儲值 chrome.storage.sync.set(options); //調用方法,並傳入options對象 observer.walk(options); });//利用Object.defineProperty實現對象雙向綁定 var observer = { walk(data) { Object.keys(data).forEach((key) => { this.defineRective(data, key, data[key], callback) }) }, defineRective(vm, key, value) { Object.defineProperty(vm, key, { get: function() { return value; }, set: function (newVal) { if (value != newVal) { value = newVal; chrome.storage.sync.set(options); } } }) } };
利用Object.defineProperty 簡化 Chrome插件本地存儲操作