2017-05-01 2 views
1

에 의해 재 할당되고 '이'키워드는이 모듈을 고려 입력 요소가 아니라 App 개체. 그러나 Function.prototype.call의 기능은 무엇입니까? 내 호출 함수가이 함수를 App에 바인딩하지 않는 이유는 무엇입니까?하지 function.prototype.call

+0

'this.addKeyValue'가 '정의되지 않음'임을 이해해야합니다. 당신이 전화하기 전에. 'call' 함수를 호출하기 위해서는 먼저'call' 함수를 호출해야합니다. 그리고 당신이 가진 모든 것은 '정의되지 않은'것입니다. – dfsq

+0

맞아, 나는 그것을 이해한다. 나는 전화 기능이 작동하는 방식을 오해하고 있었다. – JohnSnow

답변

3

하지만 그 전화 기능이 무엇입니까?

번호

this.addKeyValue.call 기능을 할 필요가 this.addKeyValue의 값을 얻을 것이다, 다음을 호출합니다. 이 함수 호출 내에서 this의 값을 지정하면이 지정됩니다.

call 함수를 호출하기 전에 전에 this의 값을 변경하지 않습니다. 그것에 대해 bind을 사용할 수 있습니다.

addButton.addEventListener('click', function() { 
    this.addKeyValue(userInput.value); 
}.bind(App)); 
+0

좋아요, 이해합니다. – JohnSnow

+0

확장 : 자신 만의'this' 객체가없는 화살표 함수를 사용할 수 있으므로 주변 함수/메소드에서'this'를 캡슐화 할 수 있습니다 :'addButton.addEventListener ('click', ') => { this.addKeyValue (userInput.value)});'#closure – Thomas

+0

@ 토마스 - 당신이 [전적으로 IE 지원을 희생시킨다] (http://caniuse.com/#search=arrow)를 기꺼이 제공한다. – Quentin