>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 `call()`, `apply()` 및 `bind()` 메소드의 차이점은 무엇입니까?

JavaScript의 `call()`, `apply()` 및 `bind()` 메소드의 차이점은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-22 08:17:10796검색

What are the Differences Between JavaScript's `call()`, `apply()`, and `bind()` Methods?

Javascript의 call(), apply(), 바인딩() 메소드 차이점 이해

Javascript에서는 call()과 apply() 메소드를 통해 개발자는 함수의 컨텍스트(this)를 지정하고 인수를 전달할 수 있습니다. 두 메서드 모두 유사한 목적을 수행하지만 인수가 함수에 제공되는 방식이 다릅니다.

bind()를 언제 사용해야 합니까?

bind() 메서드는 자체적으로 구별됩니다. call() 및 apply()에서 원래 함수의 컨텍스트를 유지하는 새 함수를 생성할 수 있습니다. 이는 비동기 콜백이나 이벤트를 처리할 때 유용합니다.

다음 코드 조각을 고려하세요.

var obj = {
  x: 81,
  getX: function() {
    return this.x;
  }
};

alert(obj.getX.bind(obj)());
alert(obj.getX.call(obj));
alert(obj.getX.apply(obj));

위의 예에서 볼 수 있듯이, 바인딩()은 나중에 실행될 때 새 함수를 반환합니다. , 원래 함수의 컨텍스트(this)를 유지합니다. 이를 통해 비동기 콜백 및 이벤트에서 컨텍스트를 쉽게 보존할 수 있습니다.

이벤트 및 비동기 콜백에서의 사용

본과 같이 바인드()의 일반적인 사용 사례에는 이벤트 리스너가 포함됩니다. 아래 코드에서:

function MyObject(element) {
    this.elm = element;

    element.addEventListener('click', this.onClick.bind(this), false);
};

MyObject.prototype.onClick = function(e) {
     var t=this;  //do something with [t]...
    //without bind the context of this function wouldn't be a MyObject
    //instance as you would normally expect.
};

이 예에서 바인딩()은 onClick()이 메서드는 이벤트에 의해 트리거될 때 이벤트 리스너를 시작한 MyObject 인스턴스의 컨텍스트를 유지합니다. 바인딩()이 없으면 onClick() 메서드의 컨텍스트는 예상한 인스턴스가 아닐 것입니다.

bind() 구현

bind( ) 메서드는 다음과 같이 구현할 수 있습니다.

Function.prototype.bind = function(ctx) {
    var fn = this;
    return function() {
        fn.apply(ctx, arguments);
    };
};

이 단순화된 구현은 제공된 컨텍스트를 사용하여 원래 함수를 호출하는 새 함수를 생성합니다. (ctx) 및 인수. 원래 Function.prototype.bind() 구현은 추가 인수 전달과 같은 추가 시나리오를 처리하기 때문에 더 복잡합니다.

위 내용은 JavaScript의 `call()`, `apply()` 및 `bind()` 메소드의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.