[英]Javascript.bind - ES5 Vs ES6
如何在ES6中使用綁定?
在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
由於訪問this.respond
,因此出現錯誤。 但是log
(和respond
)是不是一個對象的方法了,所以this
並不是指一個物體與respond
方法。 相反,您只需直接引用函數( respond
):
this.respond(...)
成為this.respond(...)
respond(...)
然而,沒有理由使用.bind
可言,哪怕是在你ES5解決方案(你永遠不會使用this
內部respond
)。
您所要做的就是調用該函數:
export default function log (req, res) {
return respond(req, res, 400, 'no data received');
}
在這種情況下,我認為您不必使用導出。 只需上一堂課。
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');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.