2016-03-03 69 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" 
相關問題