this\apply\call\bind

3749 단어

apply,call,bind는 어떤 작용, 어떤 차이

  • 삼자의 유사점
  • 는 모두 함수를 바꾸는this 대상의 지향이다.
  • 첫 번째 매개 변수는this가 가리키는 대상이다.
  • 모두 후속 파라미터를 이용하여 참조할 수 있다.
  • 다른 것은bind가 되돌아오는 함수인데 apply와call은 함수에 대한 직접 호출Function.prototype.bind:
  • 에 해당한다.
  • 작용:bind, 새로운 함수를 되돌려주고 함수 내부의this를 전송하는 첫 번째 인자
  • var fn3 = obj1.fn.bind(obj1);
    fn3();
    
  • call과 apply를 사용하여this
  • 설정
  • call apply, 함수를 호출하여 상하문 및 매개 변수 실행fn.call(context, param1, param2...)fn.apply(context, paramArray)
  • 문법은 매우 간단하다. 첫 번째 파라미터는 모두 설정하기를 원하는this 대상이다. 다른 점은call 방법으로 파라미터 목록을 수신하는 데 있다. 반면에apply 수신 파라미터 수조fn2.call(obj1);fn2.apply(obj1);는 다음과 같다.
  • var xj={
      name: " ",
      gender: " ",
      age: 24,
      say: function(){
          alert(this.name+" , "+this.gender+" , "+this.age);
      }
    }
    var xg={
      name: " ",
      gender: " ",
      age: 18
    }
    xj.say();
    
  • 에 나타난 것은 틀림없이 굶주림, 남자, 올해 24.어떻게 xj의say 방법으로 xg의 데이터를 표시합니까?콜은 이렇게 할 수 있다. xj.say.call(xg), apply는 이렇게 할 수 있다xj.say.apply(xg),bind는 이렇게 할 수 있다xj.say.bind(xg)()
  • 즉,call과apply는 모두 함수에 대한 직접 호출이고,bind 방법은 여전히 하나의 함수로 되돌아오기 때문에 뒤에 ()를 호출해야 한다.그렇다면 apply와call의 차이에 대해서는 상기 예
  • 를 고쳐 쓴다.
    var xj={
      name: " ",
      gender: " ",
      age: 24,
      say: function(school,grade){
          alert(this.name+" , "+this.gender+" , "+this.age+', '+school+" "+grade);
      }
    }
    var xg={
      name: " ",
      gender: " ",
      age: 18
    }
    xj.say(' ',' ');
    
  • 에 따르면'배고프다, 남자, 올해 24, 육재중학교 3학년'이라고 한다.say.ll(xg,'덕육중학교','4학년'), apply에 대해서는 이렇게xj.say.apply(xg,[' ',' ']),,bind에 대해서는 이렇게xj.say.bind(xg,' ',' ')(),호출 과정에서 파라미터를 전달할 수 있다xj.say.bind(xg)(' ',' ')
  • 다음 코드는 무엇을 출력합니까?

    var john = { 
      firstName: "John" 
    }
    function func() { 
      alert(this.firstName + ": hi!")
    }
    john.sayHi = func
    john.sayHi() 
    
  • //출력 결과: John: hi!
  • //이때 this는john의 대상이다.

  • 다음 코드는 무엇을 출력하는지, 왜

    func() 
    function func() { 
      alert(this)
    }
    
  • 출력: Window
  • 원인:func()는func와 같다.call(undefined);undefined는 브라우저에서 전역 대상인 window로 기본값입니다.

  • 다음 코드는 무엇을 출력합니까

    document.addEventListener('click', function(e){
        console.log(this);
        setTimeout(function(){
            console.log(this);
        }, 200);
    }, false);
    
  • 출력: #document,window;
  • 이벤트 처리 프로그램에서this는 이벤트 원본 DOM 대상
  • 을 대표한다
  • (setTimeout,setInterval 두 방법이 실행하는 함수this도 전역 대상)
  • 다음 코드는 무엇을 출력합니까, why

    var john = { 
      firstName: "John" 
    }
    function func() { 
      alert( this.firstName )
    }
    func.call(john) 
    
  • 출력: John
  • 설명:call()의 첫 번째 매개 변수는 정의된this값을 나타낸다. 즉func()의this는john을 대표한다.

  • 다음 코드에 무슨 문제가 있으면 어떻게 수정합니까

    var module= {
      bind: function(){
        $btn.on('click', function(){
          console.log(this) //this 
          this.showMsg();
        })
      },
    
      showMsg: function(){
        console.log(' ');
      }
    }
    
  • 코드의this는 $btn,this를 가리킨다.showMsg()가 제대로 작동하지 않음
  • 다음과 같이 수정
  •    var module= {
            bind: function(){
                var _this = this;
                $btn.on('click', function(){
                    console.log(_this) //_this module;
                    _this.showMsg();// 
                })
            },
            showMsg: function(){
                console.log(' ');
            }
        }
    

    좋은 웹페이지 즐겨찾기