[英]Is it bad practice to attach an arrow function to another arrow function
假設沒有必要對this
在所有這些功能。 這有效
const add = (x, y) => x + y
add.foo = () => 4
console.log(add(1, 1))
console.log(add.foo())
我認為這對於打包api請求處理程序和函數調用非常有用,例如(假設express.js):
const getPost = async (postId) => db.get(postId) // assuming db.get will get the post
getPost.handler = async (req, res, next) => {
try {
const { postId } = req.body
res.send(await getPost({ postId }))
} catch (err) {
next(err)
}
}
然后,我可以使用app.post('/get-post', getPost.handler)
並仍然具有可測試的getPost
函數。
這對我來說似乎很好,我只是想知道這是公認的做法,還是我沒有想到的事情。
函數是對象,對象是方法。 多數民眾贊成在JS中的慣例,實際上類的所有靜態屬性都是構造函數的一部分:
new Promise()
Promise.resolve()
或采取jQuery:
$("div")
$.ajax(/*...*)
const add = (x, y) => x + y
在上面的代碼中, add
是一個對象,其原型為Function.prototype。 就像JavaScript中的任何對象一樣,它可以具有屬性。 這些屬性本身可以是任何對象。 包括其原型將為Function.prototype的對象。
這不是一個壞習慣。 母語實際上使用此語言。 因為您原型的對象Function.prototype本地公開了Function.prototype.call或Function.prototype.apply之類的函數
例如 :
const add = (x, y) => x + y console.log(add.call(undefined, 3, 4));
我建議您避免這種實施,因為如果TC39委員會決定添加與您已經使用過的某些財產同名的新財產,將來可能導致問題。
handler
可能不會發生(但可能會發生),但是如果您開始在代碼中執行此操作,將很可能開始越來越多地擴展這些屬性。
最近有一個與此問題有關的案例引起了很多關注。 您可以在這里了解更多有關此的信息: https : //dev.to/kayis/smooshing-javascript--5dpc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.