簡體   English   中英

將箭頭功能附加到另一個箭頭功能是不好的做法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM