将不存在的属性的引用分配给变量

时间:2016-03-03 14:41:07

标签: javascript

这可能是一个愚蠢的问题,但我有一个对象,我想在其中存储其他函数/变量的引用,然后使用它们。

例如,

var obj = {
    keyA: {
        ref: window.objects.someAAA
    },
    keyB: {
        ref: window.objects.someBBB
    }
}

此处,当我设置此对象时,window.objects为空,因此访问这些键(someAAAsomeBBB)将会undefined

我知道当我第一次想到这样分配它们并且在加载后期望它们的实际值时,我是愚蠢的,可以通过obj.keyAobj.keyB获得。但显然,它们仍然包含undefined

但是有办法做到这一点!我知道如果我设置字符串而不是引用,我可以eval,但是更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

认为这应该有效

var obj = {
    keyA: {
        ref: function() { return window.objects.someAAA; }
    },
    keyB: {
        ref: function() { return window.objects.someBBB; }
    }
}

然后您可以通过

访问
obj.keyA.ref()

测试

添加上面的代码,然后执行

window['objects'] = {}; 
window['objects']['someAAA'] = 'Hallo';
obj.keyA.ref() // will Output 'Hallo'

答案 1 :(得分:0)

尝试使用Getters来解决此类问题:

var obj = {
    get keyA(){
       return (window['objects'])? window.objects.someAAA : null
    },
    get keyB() {
        return (window['objects'])? window.objects.someBBB : null
    }
}

// as now window.objects doesn't exists
console.log(obj.keyA);   // outputs "null"

window.objects = {'someAAA': "aaa-value", 'someBBB': "bbb-value"};

console.log(obj.keyA, obj.keyB);    // outputs "aaa-value" "bbb-value"