如何将变量用作对象中的键?

时间:2013-05-01 23:20:39

标签: javascript

这可能吗?现实世界的例子在这里:

var userKey = "userIdKey";

chrome.storage.sync.set({ userKey: "Hello World" }, function () {
    chrome.storage.sync.get(userKey, function (data) {
        console.log("In sync:", data);
    });

    console.log("Success");
});

此示例当前失败,因为getter查找“userIdKey”,其中setter将变量字面解释为“userKey”

更新:我完全了解通过数组表示法访问变量。我提供的真实世界示例是对象的创建。我希望确保始终使用相同的密钥来获取和设置 - 而不是依赖于两个字符串常量保持同步。

3 个答案:

答案 0 :(得分:1)

var myObject = {},
    objectKey = 'Foo',
    myObject[objectKey] = 'Baz';

console.log(myObject[objectKey]);

答案 1 :(得分:1)

正确的方法是:

    var key = "something";
    Object.defineProperty(d, key, {
        get: function() {return this.getFullYear() },
        set: function(y) { this.setFullYear(y) }
    });

或者在你的情况下:

chrome.storage.sync.defineProperty(this, userKey, {
    get: function() {return this[userKey];},
    set: function(value) {this[userKey] = value};
});

阅读HERE了解更多相关信息。 Object.prototype.defineProperty是新功能,在旧版模式下无法使用,但填充功能可以Object.prototype.__defineGetter__Object.prototype.__defineSetter__使用。

答案 2 :(得分:0)

像数组一样访问它:

myObject['Foo']

设置:

myObject['Foo'] = "Bar"

或作为变量:

var key = "Foo";
myObject[key] = "Bar"