JavaScript - this


  1. 전역공간에서 window/global. 전역 객체를 가리킨다.
  2. 함수 내부에서 window/global. 전역 객체를 가리킨다. 디폴트는 전역인데 바뀔수는 있음
  3. 메소드 호출시 메소드 호출 주체(메소드명 앞). 함수는 전역객체의 메소드라고 생각하면 편하다.

메소드 안에서의 this.

  var a= 10;
  var obj = {
    a:20,
    b: function(){
      console.log(this.a); //20
      
      //1.
      function c(){
        console.log(this.a); //10. c가 함수이기 떄문이다. 
      }
      
      c();
      
      //2.
      var self = this;
      
      function c(){
        console.log(self.a); //20
      }
      
      c();
    }
  }
  
  obj.b();
  1. callback에서 기본적으로는 함수내부에서와 동일
  function a(x,y,z){
    console.log(this, x, y, z)
  }
  var b = {
    c: 'eee'
  };
  
  //1. 즉시호출
  a.call(b, 1, 2, 3);
  
  a.apply(b, [1,2,3]);
  
  //2.새로운 함수 생성(currying)
  var c = a.bind(b);
  c(1,2,3);
  
  var d = a.bind(b, 1, 2); //a를  가지고 새로운 함수를 만들거다.
  d(3)
  var callback = function(){
    console.dir(this); //window
  };
  
  var obj = {
    a: 1,
    b: function(cb){
      cb();
    }
  };
  
  obj.b(callback);
  var callback = function(){
    console.dir(this); //obj
  };
  
  var obj = {
    a: 1,
    b: function(cb){
      cb.call(this);
    }
  };
  
  obj.b(callback);

모두 다 결과는 Object{c:”eee”} 1 2 3 이다.

모두 첫번째 인자를 this로 하겠다는 규칙이 있다.

기본적으로는 함수의 this와 같다.

제어권을 가진 함수가 callback의 this를 명시한 경우는 그에 따르지만 개발자가 this를 바인딩한 채로 callback을 넘기면 그에 따른다.

  1. 생성자함수에서 인스턴스