如何在ES6中使用bind?
在预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发布于 2016-07-17 06:37:43
在这种情况下,我认为你不必使用出口。做个课就行了。
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');发布于 2016-07-17 11:22:10
您正在获取错误,因为您正在访问this.respond。但是log (和respond)不再是对象方法了,所以this不使用respond方法来引用对象。相反,您只需直接引用函数(respond):
this.respond(...)变成respond(...)
但是,根本没有理由使用.bind,甚至在ES5解决方案中也是如此(您从未在respond中使用this )。
您要做的就是调用这个函数:
export default function log (req, res) {
return respond(req, res, 400, 'no data received');
}https://stackoverflow.com/questions/38418449
复制相似问题