Подтвердить что ты не робот

Chrome.storage.local.set с использованием имени переменной ключа

В расширении Google Chrome я хочу использовать chrome.storage.local (в отличие от localStorage), потому что:

  • С парами ключ-значение это может быть любой объект (в отличие от только строки)
  • Изменения в модели данных с помощью setter storage.set могут инициировать прослушиватель событий

Используя storage.set, как я могу получить имя переменной?

Примечание. Если я не использую setter, я могу сделать storage[v1], но изменения в объекте не вызовут прослушиватель событий.

var storage = chrome.storage.local;
var v1 = 'k1';

storage.set({v1:'s1'});

storage.get(v1,function(result){
    console.log(v1,result);
    //console output = k1 {}
});
storage.get('v1',function(result){
    console.log(result);
    //console output = {v1:'s1'}
});
4b9b3361

Ответ 1

Это то, что вы ищете?

var storage = chrome.storage.local;

var v1 = 'k1';

var obj= {};

obj[v1] = 's1';

storage.set(obj);

storage.get(v1,function(result){
  console.log(v1,result);
  //console output = k1 {v1:'s1'}
});

storage.get('v1',function(result){
  console.log(result);
  //console output = {v1:'s1'}
})

Ответ 2

Это 2016, а Chrome (и Firefox и Edge - все, кто использует модель расширения Chrome) поддерживают ES6 Вычисленные имена свойств.

С этим задача становится проще:

var storage = chrome.storage.local;
var v1 = 'k1';

storage.set({
  [v1]: 's1' // Will evaluate v1 as property name
});

storage.get(v1, function(result) {
    console.log(v1, result);
});