2016-03-03 30 views
1

这可能是一个愚蠢的问题,但我有一个对象,我想在其中存储其他函数/变量的引用并稍后使用它们。将一个不存在的属性的引用赋值给一个变量

例如,

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

在这里,当我设置此目的,window.objects是空的,所以访问这些键(someAAAsomeBBB)会给undefined

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

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

+0

你可以有值,当你打电话给他们返回window.objects.something'的'的价值功能。 – Pointy

+0

你只使用JavaScript吗?你有任何框架或libray,如jQuery? – CodeArtist

+0

我明白了,所以没有办法存储参考。 @CodeArtist,是平原Js –

回答

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' 
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" 
相关问题