2017-06-20 55 views
0

我的應用程序有多個屏幕,我想爲對象中的每個屏幕存儲屬性。我希望能夠通過名稱容易引用它,比如:我將如何構造一個對象數組,以便我可以用這種方式引用屬性?

var homelabel = screen('home').label; 

var settingsIcon = screen['settings'].icon; 

這將如何做呢?

+0

你可以做'screen'那麼對象訪問它像'畫面[ '家']'或'屏幕[ '設置']',除非你是在談論不同的HTML頁面,這是一個不同的問題 –

+0

'屏幕'將需要一個函數,*返回*一個對象。不,沒有陣列參與。 – Bergi

+0

'screen.home.label'或'screen.settings.icon'怎麼樣 - 這是普通對象的開箱即用行爲。如果你需要括號,屏幕必須是一個功能。 – James

回答

1

let screen = { 
 
    "home": { 
 
    "icon": "home_icon.png", 
 
    "label": "home_label" 
 
    }, 
 
    "settings": { 
 
    "icon": "settings_icon.png", 
 
    "label": "settings_label" 
 
    } 
 
} 
 

 
console.log(screen["home"].label); 
 
console.log(screen["settings"].icon);

0

screen必須是一個函數,該函數返回傳遞給該函數的任何對象。您可以將screens變量移出該函數,然後您可以通過引用直接訪問它。

var screens = { 
 
    home: { 
 
     label: 'Home', 
 
     icon: 'fa fa-home' 
 
    }, 
 
    settings: { 
 
     label: 'Settings', 
 
     icon: 'fa fa-cog' 
 
    } 
 
}; 
 
    
 
function screen(screenType){ 
 
    
 
    if(screenType in screens){ 
 
     return screens[screenType]; 
 
    } 
 
    
 
    return {}; 
 

 
} 
 

 
var home = screen('home').label; 
 

 
console.log(home); 
 

 
console.log(screens['home'].icon);

0

有它只是在你的問題,創建一個函數,並返回一個對象。如果您調用函數的屬性不存在,則應返回空對象以避免錯誤。

function screen(prop) { 
 
    let obj = { 
 
    home: { 
 
     label: 'foo' 
 
    }, 
 
    settings: { 
 
     icon: 'bar' 
 
    } 
 
    }; 
 

 
    return obj[prop] || {}; 
 
} 
 

 

 
console.log(screen('home').label); //foo 
 
console.log(screen('foo').bar); //undefined

相關問題