2016-11-15 1 views
0

난 그냥 코드 반응의 조각에 다음과 같은 구조를 건너 왔어요 : 어떤에서차이 (ARG)과 obj.func.bind (OBJ, ARG)

<MyActionComponent callback={this.func.bind(this, arg)}> 

제 생각에 bind은 함수의 this을 첫 번째 인수로 설정하고 추가 인수를 전달하여 해당 함수를 실행한다는 것을 이해합니다. func이 이미 객체의 속성 인 경우 this이되고 싶으므로 this.func(arg)은 동일한 문제가 발생합니다.

동일한 기능에 대해 더 복잡한 구문으로 보이는 동기가 보이지 않습니다. obj.func(arg)obj.func.bind(obj, arg)과 다르게 동작하는 컨텍스트가 있습니까? 아니면 내가 알지 못하는 비 기술적 측면 (예 : 대회, 일관성)이 있습니까?

+1

콜백은 그 안에이 사용하고 콜백은 일반적으로 윈도우의 컨텍스트로 호출됩니다, 그러나 여기에서 우리는이 MyActionComponent –

+0

@SharathBangera의 맥락으로 호출되는 것을 확인하는'만약 이 윈도우는 위의 두 코드를 사용하여 윈도우의 컨텍스트에서 호출 할 것입니다. –

+0

첫로드에서는 함수를 호출하고 있습니다. –

답변

2

임계 차이 func.bind(obj, arg) 반면 함수 기능을 실행하지 않는다obj.func(arg)실행한다는 것이다. 함수가 실제로 실행되면 이 obj에 바인딩되도록합니다.

는 여기를 참조하십시오 :

var obj = { 
    fooFn: function() {console.log("this = ", this)} 
} 

obj.fooFn() // => prints "this = [Object]" 

var boundFn = obj.fooFn.bind("bar") 
boundFn() // => prints "this = 'bar'" 
+0

아아, 그냥 바운드 컨텍스트와 가능한 인수가있는 함수의 "파생물"을 만듭니다. Idk 내가 이것을 놓칠 수 있었던 방법. .. 고마워. –

2

this 컨텍스트를 설정하는 것 외에도, Function.prototype.bind 또한 함수가 호출 될 때 인수 앞에 붙 세트 인수로 할 수 있습니다. bind 함수의 반환 값은 해당 함수를 호출 한 결과가 아니며 바인딩 된 this 컨텍스트와 함수가 바인딩 될 때 지정된 앞에 추가 된 인수로 호출 할 수있는 함수입니다.

const addStuff = function(a, b) { 
 
    this.sum += a; 
 
    this.sum += b; 
 
}; 
 

 
const resultA = { sum: 0 }; 
 
const add_A_and_B = addStuff.bind(resultA); 
 
add_A_and_B(1, 2); 
 

 
console.log("add_A_and_B(1, 2):", resultA); 
 

 
const resultB = { sum: 0 }; 
 
const add_5_and_B = addStuff.bind(resultB, 5); 
 
add_5_and_B(2); 
 

 
console.log("add_5_and_B(2):", resultB);

+0

감사합니다. 필자는 어떻게 든 그것을 파헤 치고 결과를 반환하는 대신 함수를 반환한다고 생각했습니다. 이제 콜백은 실제 함수이기 때문에 더 이해하기 쉽습니다. –