>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 바인드 메소드 코드 예

JavaScript의 바인드 메소드 코드 예

不言
不言앞으로
2019-03-11 16:27:342541검색

이 글은 JavaScript의 바인드 메소드에 대한 코드 예제를 제공합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

전화, 신청 및 신규는 이전에 구현되었습니다. 그건 그렇고, 바인딩은 오늘날에도 구현됩니다.
우선:

  1. bind 메소드는 이에 바인딩된 함수를 반환하는데, 해당 함수는 실행되지 않으며 수동으로 호출해야 합니다. (이러한 관점에서 바인드 함수는 고차 함수이며 호출 및 적용 메소드와 다릅니다.)
  2. 바인드 메소드는 이를 바인딩하고 매개변수를 전달할 수 있습니다. 이 매개변수는 여러 번 전달될 수 있습니다.
  3. bind로 묶인 함수가 새로운 함수라면 이 시점에서 이 점이 바뀔 것입니다. 이 시점은 현재 함수의 인스턴스입니다.
  4. 생성자의 속성과 메서드는 각 인스턴스에서 사용할 수 있습니다.

좋아, 코드로 가보자~

Function.prototype.mybind = function(context){
    let that = this;
    let args1 = Array.prototype.slice.call(arguments,1);
    let bindFn = function(){
        let args2 = Array.prototype.slice.call(arguments);
        return that.apply(this instanceof bindFn?this:context,args1.concat(args2)); 
    }
    let Fn = function(){};
    Fn.prototype = this.prototype;
    bindFn.prototype = new Fn();
    return bindFn;
}

우선 매개변수 args1을 처음으로 전달받았는데 이를 가로채야 한다. 여기서 첫 번째 매개변수가 이것이기 때문입니다. 다음으로, 두 번째로 전달된 매개변수 args2를 획득하고 해당 실행을 반환하는 함수 binFn이 선언됩니다. 여기서 "that"은 원래 기능을 실행하고 원래 기능인 "this"를 바인딩할 때 판단에 주의하세요. 이것이 생성자 binFn new에 의해 생성된 인스턴스라면 여기서는 인스턴스 자체여야 합니다. 반대로, 바인드 메소드에 의해 전달된 것은 this(context)입니다. 마지막으로 concat()을 통해 두 번 얻은 매개변수를 연결하고 전달하면 처음 세 항목이 구현됩니다.
마지막 항목: 생성자의 속성과 메서드는 각 인스턴스에서 사용할 수 있습니다. 여기서 중간 함수 Fn은 프로토타입 체인을 연결하는 데 사용됩니다. Fn의 프로토타입은 이것의 프로토타입과 같습니다. Fn과 this는 동일한 프로토타입 객체를 가리킵니다. BindFn의 프로토타입은 Fn의 인스턴스와 동일합니다. Fn 인스턴스의 __proto__는 Fn의 프로토타입을 가리킵니다. 즉, binFn의 프로토타입은 이와 동일한 프로토타입을 가리키며, 동일한 프로토타입 객체를 가리킵니다. 이 시점에서는 자체 바인딩 메서드를 구현했습니다.
코드가 작성되었으니 테스트해보겠습니다~

Function.prototype.mybind = function(context){
그것을 = 이것으로 하자;
args1 = Array.prototype.slice.call(arguments,1);
바인딩Fn = function(){
args2 = Array.prototype.slice.call(arguments);
        return that.apply(bindFn의 이 인스턴스?this:context,args1.concat(args2));
}
Fn = function(){};
Fn.prototype = this.prototype;
binFn.prototype = new Fn();
BindFn을 반환합니다.
}

obj = {라고 놔두세요
이름:'호랑이'
}

함수 fn(이름,나이){
This.say = '우우우우우~';
console.log(this);
Console.log(this.name+'키운 사람'+name+','+age+'세');
}

/**처음으로 매개변수 전달*/
바인딩Fn = fn.mybind(obj,'

위 내용은 JavaScript의 바인드 메소드 코드 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제