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

Assign reference of a non-existent property into a variable

本文关键字:变量 分配 属性 不存在 引用      更新时间:2023-09-26
这可能是

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

例如

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

在这里,当我设置这个对象时,window.objects是空的,所以访问这些键(someAAAsomeBBB)会得到undefined

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

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

认为这应该有效

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'

在这种情况下尝试使用 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"