2017-07-03 39 views
1

我正在重構我的nodejs應用程序,並試圖使代碼看起來更乾淨,然後在直接調用函數時遇到此問題。爲什麼nodejs函數參數在顯式調用時行爲不同?

這個工程:

router.route('/').get(({ query }, res, next) => { 
ItemsLogic.getItems(query) 
    .then((items) => res.json(items)) 
    .catch(next) 

})

但是,這將引發錯誤:

router.route('/').get(({ query }, res, next) => { 
ItemsLogic.getItems(query) 
    .then(res.json) 
    .catch(next) 

})

的錯誤是:「無法讀取屬性 '應用' 的未定義」。它在快速響應的json()函數內部,並且與該方法中的this對象有關,該對象由於某種原因未定義。

+0

@abhishekkannojia - 你不能傳遞「語句」(除非你把它們放在字符串中以成爲'eval'ed)。 'res.json'的值是一個函數。 – Quentin

+0

@Quentin是的,你是對的。沒有意識到'res.json'是一個函數。我想這就是當你沒有正確地通過代碼時會發生什麼。感謝澄清。 – abhishekkannojia

+0

爲了使這項工作,只要通過:.then(res.json.bind(res)) – binariedMe

回答

0

函數內部的值this取決於函數的調用方式。

鑑於res.json();thisres

鑑於var foo = res.json; foo();this不是res

json函數關心的是this的值。通過傳遞res.json,您將獲得json(該函數)的值,並將其從res斷開,就像上面的第二個示例一樣。

相關問題