2016-07-17 5 views
1

어떻게 ES6에서 bind를 사용할 수 있습니까?Javascript.bind - ES5 대 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에 있다고 할 수 있습니까? 당신이 경우 수출을 사용할 필요는 생각하지 않는다

TypeError: Cannot read property 'respond' of undefined 
+1

:

당신이해야 할 모든 함수를 호출입니까? – Bergi

+3

WTH는'bind'를 전혀 사용하지 않습니까? 그냥'this.respond (req, res, 400, 'no data received');'(그리고 그에 상응하는 ES6 해결책 자체를 선물) – Bergi

+0

'bind'가 어떻게 작동하는지 보려고합니다. 그것이 다른 프로그램에서 사용되는 것을 보았습니다. 참조로 사용해야합니다. 그래서 왜 그들이'bind '를 사용하는지 이해하려고 노력하고 있습니다. – laukok

답변

-1

: 나는 오류가 발생합니다 물론

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); 
} 

. 단순히 수업을 만드십시오.

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

감사합니다. 속임수는'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

관련 문제