1 回答

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
改變:
this.isNumber(...)
到:
UserMiddleware.isNumber(...)
除非您在將其作為中間件傳遞時(shí)專門使用或某些類似技術(shù),否則this
中間件函數(shù)內(nèi)部的值不會(huì)是您的UserMiddleware
對(duì)象.bind()
。
如需更多選項(xiàng)的幫助,請(qǐng)向我們展示您使用的代碼validateSignUp()
。
例如,如果您正在執(zhí)行以下操作:
app.use(UserMiddleware.validateSignUp);
然后,您可以this
使用.bind()
如下方式設(shè)置所需的值:
app.use(UserMiddleware.validateSignUp.bind(userMiddleware));
傳遞UserMiddleware.validateSignUp
給函數(shù)會(huì)立即失去與UserMiddleware
對(duì)象的關(guān)聯(lián),并且該this
函數(shù)被調(diào)用時(shí)的值將取決于調(diào)用者如何調(diào)用該函數(shù)而不是該UserMiddleware
對(duì)象。使用.bind(UserMiddleware)
強(qiáng)制設(shè)置所需的this
值。 .bind()
實(shí)際上創(chuàng)建了一個(gè)包裝函數(shù),它的唯一工作是重新附加所需的this
值,而該包裝函數(shù)是作為中間件處理程序傳遞的。中間件基礎(chǔ)結(jié)構(gòu)使用錯(cuò)誤的this
值調(diào)用包裝函數(shù),然后包裝validateSignUp
函數(shù)使用所需的值調(diào)用您的函數(shù)this
- 可能使用.apply()
.
為了看看如何.bind()
工作,你可以看到一個(gè)填充工具為它在這里的MDN。有關(guān)如何this
設(shè)置的值的更多討論,請(qǐng)參閱設(shè)置 的六種方式this
。
添加回答
舉報(bào)