利用Object.defineProperty 简化 Chrome插件本地存储操作

//初始化数据对象
var options = {
    bdykey: '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, function () { chrome.storage.sync.set(options) });
});
//利用Object.defineProperty实现对象双向绑定
var observer = {
    walk(data, callback) {
        if (typeof callback != 'function') {
            callback = function () { };
        }
        Object.keys(data).forEach((key) => {
            this.defineRective(data, key, data[key], callback)
        })
    },
    defineRective(vm, key, value, callback) {
        Object.defineProperty(vm, key, {
            get: function () {
                return value;
            },
            set: function (newVal) {
                if (value != newVal) {
                    value = newVal;
                    callback();
                }
            }
        })
    }
};

猜你喜欢

转载自www.cnblogs.com/GoCircle/p/10611099.html