如何在ES6中使用bind?
在pre-es6编码方式中(我假设这是ES5),我会这样做:
var app = {};
app.log = function(req, res) {
var respond = this.respond.bind(this, req, res);
return respond(400, 'no data received');
}
app.respond = function(req, res, status, message) {
console.log(req); // hello
console.log(status); // 400
console.log(message); // no data received
}
app.log('hello');
但我怎么能在ES6中做到这一点?
export default function log (req, res) {
var respond = this.respond.bind(this, req, res);
return respond(400, 'no data received');
}
function respond (req, res, status, message) {
console.log(req);
console.log(status);
console.log(message);
}
当然我会收到错误:
TypeError: Cannot read property 'respond' of undefined
答案 0 :(得分:3)
您收到错误是因为您正在访问this.respond
。但log
(和respond
)不再是对象方法,因此this
不会使用respond
方法引用对象。相反,您只需直接引用函数(respond
):
this.respond(...)
变为respond(...)
但是,根本没有理由使用.bind
,甚至在您的ES5解决方案中也是如此(您永远不会在this
内使用respond
。)
您所要做的就是调用函数:
export default function log (req, res) {
return respond(req, res, 400, 'no data received');
}
答案 1 :(得分:-1)
在这种情况下,我认为你不得不使用导出。简单地上课。
class App {
log(req, res) {
var respond = this.respond.bind(this , req , res);
return respond(400, 'no data received');
}
respond(req, res, status, message) {
console.log(req);
console.log(status);
console.log(message);
}
}
var app = new App();
app.log('hello');