簡體   English   中英

Javascript.bind-ES5與ES6

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

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