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

 

通常谷歌插件本地存储写法很别扭☹,如

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);
                }
            }
        })
    }
};

 

转载于:https://www.cnblogs.com/GoCircle/p/10611099.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值