我有这个功能:
function SaveToStore(thisObjName) {
var thisObj = $('#'+thisObjName);
chrome.storage.sync.set({
"cbSO" : thisObj.is(':checked')
});
}
我想使用包含thisObjName
的参数"cbSO"
作为我传入chrome.storage.sync.set
的对象中的键(属性名称):
function SaveToStore(thisObjName) {
var thisObj = $('#'+thisObjName);
chrome.storage.sync.set({
thisObjName : thisObj.is(':checked')
});
}
但是,这会创建名为thisObjName
的属性,而不是cbSO
。如何使用参数的值作为键?
答案 0 :(得分:2)
这个问题有两个答案:
ECMAScript5(ES5)及以下
ECMAScript6(ES6)及以上的答案
您不能使用属性初始值设定项,:
之前的部分始终使用字面,它不是一个被评估的表达式。
要使用变量中的名称创建属性,必须单独创建对象,然后使用括号表示法设置属性(然后将对象传递给函数):
function SaveToStore(thisObjName) {
var thisObj = $('#'+thisObjName), args = {};
args[thisObjName] = thisObj.is(':checked');
chrome.storage.sync.set(args);
}
您可以使用property initializer中的计算属性名称执行此操作。它看起来像这样:
function SaveToStore(thisObjName) {
var thisObj = $('#'+thisObjName);
chrome.storage.sync.set({
[thisObjName]: thisObj.is(':checked') // ES6 syntax! Not currently widespread
});
}
请注意[]
左侧thisObjName
周围的:
- 这些表示内部的内容是表达式,而不是文字