2016-07-17 10 views
1

どのようにES6でバインドを使用できますか?コーディングの前ES6のようにJavascript.bind - ES5対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 
+1

あなたがしなければならないのは、関数を呼び出すのですか? – Bergi

+3

WTHあなたは 'bind'を全く使っていますか?ちょうど 'this.respond(req、res、400、 'no data received');'(それと同等のES6ソリューションはそれ自体を提示します) – Bergi

+0

'bind'がどのように動作するか見てみたいと思います。他のプログラムで使用されているので、参照として使用する必要があります。そのため、なぜバインドを使用するのか理解しようとしています。 – laukok

答えて

-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'); 
+0

awwありがとうございます。そのトリックは 'class'を使うことです! – laukok

+3

シングルトンに 'class'esを使用しないでください。通常、オブジェクトリテラルがより適切です。 – Bergi

+0

'シングルトンにクラスを使用しないでください。通常、オブジェクトリテラルがより適切です。「あなたはどういう意味ですか? – laukok

3

this.respondにアクセスしているため、エラーが発生しています。しかしlog(およびrespond)はもはやオブジェクトメソッドではないので、thisrespondメソッドを持つオブジェクトを参照していません。代わりに、あなたは、単に直接機能(respond)を参照:

this.respond(...)しかしrespond(...)


なり、ないもあなたのES5溶液中で、まったく.bindを使用する理由はありません(あなたは決して内部thisを使用していませんrespond)。あなたが同様にES6で `app`オブジェクトを使用していないのはなぜ

export default function log (req, res) { 
    return respond(req, res, 400, 'no data received'); 
} 
+0

'(req、res、400、 'no data received')'パラメータが多すぎます。だから私は 'バインド 'を使うのです – laukok

+2

え? 'respond'は' function respond(req、res、status、message){'それは4つの引数をとります。私は4つの引数を渡しています。たぶん私の答えは明らかではなかった、私はより多くのコードを追加させてください。 –

+0

はい 'function respond(req、res、status、message){'は4つのパラメータをとります。私はそこのparamsも減らそうとしています。 – laukok

関連する問題