我有一个带回调参数的函数。我用这种方式,它工作得很好:
DB.last(user,(data) => res.json(data));
我尝试将其重写为类似的内容,以使其更具可读性:
DB.last(user,res.json);
其中DB.last是
static last(user, callback) {
let data = {name: user, registered: new Date()};
callback(data);
}
函数调用DB.last当然是在一个快速路由器脚本中。
我想我看到了两者之间的区别,但是将res.json作为回调参数传递给我的DB模块似乎是合乎逻辑的(我的意思是我可以在JS中传递一个函数)但是它赢了以这种方式工作。
我错过了什么?为什么要赢得这项工作呢?
答案 0 :(得分:1)
您必须使用res.json.bind(res)
。
当您致电res.json()
时,它会在res
对象上执行(即this
值在执行此功能时引用res
。但是,当您将res.json
作为回调参数传递,然后将其作为callback()
调用时,会在调用this
的上下文中的callback()
对象上执行该操作
使用bind()
方法强制在res
上调用该函数。无论何时调用绑定函数,其this
值始终为res
。