2012-03-08 2 views
2

ECMAScript 5 엄격 모드에 대한 기사 읽기가 끝났습니다.ECMAScript 5에서 .bind()가 추가 된 이유는 무엇입니까?

ECMAScript 5에 .bind()가 추가되었습니다.

var obj = { 
    method: function(name){ 
    this.name = name; 
    } 
}; 

obj.method.bind(obj,"hello"); 

그것은 obj.method.call (OBJ "안녕하세요") 동일하지 ??

+1

'obj.method.bind (obj, "hello")()'는 동일합니다. – pimvdb

답변

12

아니요, 일치하지 않습니다.

바인드를 사용하면 인데 아무 것도 호출하지 않고 함수를 생성합니다. obj.method.call(obj, 'hello')처럼 call으로 - 실제로 메소드를 호출하고 있습니다.

obj.method.bind(obj, 'hello')과 동일한 표현은 function(){obj.method.call(obj, 'hello')}입니다. 그것은 더 많은 벼랑이다. 그리고 그것은 ES5가 편의를 제공하려고 노력하고있는 벼랑입니다.

bind의 소개에 대한 역사적인 이유가 있습니다. 그것은 몇 년 전에 Prototype.js의 헬퍼 메소드 중 하나로 대중적이되었습니다. 그런 다음 밑줄과 같은 다른 인기있는 라이브러리로 이동했습니다 .js. ES5는 이미 대중적이고 수요가 많은 것을 따랐습니다.

0

기존 기능에서 새 기능을 만드는 주된 이유는 해당 기능을 호출 할 대상과 함께 전달할 수 있기 때문입니다. 이것을 고려하십시오 : printPropX은() 객체의 멤버 함수가

var obj = { 
    x:"Hello", 
    printPropX: function() { 
    alert(this.x); 
    } 
}; 

setTimeout(obj.printPropX.bind(obj), 1000); // will alert "Hello" after 1 second 

setTimeout(obj.printPropX, 1000); // will fail as 'this' won't be defined inside the function body once invoked 

있지만 'OBJ', 그것은 '이'가, 바인딩과 결합하지 않는 한() 'OBJ'로 설정하여 호출되지 않습니다.