2017-07-03 144 views
0

我試圖編寫一個返回另一個函數的函數。我的目標是編寫一個函數,它接受一個對象並返回另一個函數「search」。當我用鍵調用搜索函數時,我想從第一個函數中給出的對象返回該鍵的值。錯誤:調用另一個函數返回的函數時未定義函數

propertyOf = function(object) { 
    return search = function (key) { 
    for (key in object) 
     if (key === object.property){ 
      return object[property] 
     } 
    } 
    } 

說我有一個對象:

var me = {name: "Bob", age: 87} 

如果我打電話propertyOf (me),我得到[功能:搜索]作爲結果。當我打電話給search (age)時,我得到了沒有定義搜索的錯誤。如何在使用某個鍵的情況下調用'inside'函數,同時仍然引用我想要搜索的對象?

+0

http://jsbin.com/tubixusevi/1/edit?js,console - 我無法重現您所描述的問題。嘗試提供一個真正的[mcve]。 – Quentin

+1

除此之外:如果您要忽略返回值並僅使用函數創建的全局函數,那麼'propertyOf'中沒有任何返回值。 – Quentin

+0

*「key = object.property」*應該是** key == object.property ** – derloopkat

回答

1

考慮嘗試這樣的:

let bob = { 
    name: 'Bob', 
    age: 87 
}, 
searchBob; 

propertyOf = object => { 
    return propName => { 
    for (let key in object) { 
    if(key === propName) return object[key] 
    } 
    } 
} 

searchBob = propertyOf(bob); 

// Call it like this: 

console.log(searchBob('age')); // 87 
+0

這正是我想要做的,謝謝!只是爲了澄清=>箭頭的用法:我想用傳統的符號來寫,並且用函數的前兩行代替:'propertyOf = function(object){return 0} {} {} '但我不再得到正確的輸出,它只是說未定義。我在做什麼錯我的語法?爲什麼我不必把(鍵)作爲第二個函數的參數? – Ana

+0

在函數頂部有'searchBob'的目的是什麼? – Ana

+0

對不起還有一個問題,因爲我正在通過此代碼工作 - 是'propName'函數的名稱?如果是這樣,評估是否(key === propName)意味着什麼?特別困惑,因爲這是INSIDE函數,所以代碼如何檢查函數是否等於密鑰? – Ana