Skip to content

Instantly share code, notes, and snippets.

@gwnuysw
Last active June 26, 2018 01:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gwnuysw/4c1ea3e9be9adb11381c62ef3bdc6acc to your computer and use it in GitHub Desktop.
Save gwnuysw/4c1ea3e9be9adb11381c62ef3bdc6acc to your computer and use it in GitHub Desktop.
udacity object-oriented-javascript 강의를 참고 했습니다.

this keyword

left of the dot

'This'는 값이 바운드되는 식별자입니다. 마치 변수와 같습니다. 'This'는 올바른 객체에 자동으로 바운드 됩니다. 인터프리터가 'This'에 올바른 바인딩을 하는 방법은 함수의 위치 매개 변수 규칙과 같습니다. 'This'가 위치 매개변수와 구별되는 점은 당신이 객체의 메소드나 생성자를 호출할때 어떤 오브젝트에 초점을 맞출 것인지 직관적인 도움을 주기 위함입니다.

함수가 호출될때 올려다보는 객체가 바로 'this'가 바운드 되는 객체 입니다.

var obj = {
  fn : function(a, b){
    log(this);
   }
};

obj.fn(3,4); // 함수가 호출될때 obj가 바로 this가 가리키는 객체

함수의 매개변수 역시 함수가 호출될때 실매개변수와 바인딩 됩니다. this의 바인딩이 매개변수의 바인딩처럼 호출될때 결정된다는 것은 중요한 사실입니다. this 마치 묵시적인 매개변수와 같습니다.

this는 점연산자 왼쪽의 객체를 매개변수로 넘겨줍니다. 예를 들어 obj.fn(g,b); 객체 obj가 this에 바인딩됩니다. this의 일반적인 사용은 메소드 표시 매개변수입니다.

obj.fn(3,4);
obj['fn'](3,4); //위 두 표현은 동치 입니다.

만약 호출된 함수의 점연산자가 없다면 this에 바인딩되는 객체는 global scope입니다.

call() function

The call() method is a predefined JavaScript method. It can be used to invoke (call) a method with an owner object as an argument (parameter). With call(), an object can use a method belonging to another object.

Javascript w3school에 나와 있는 설명입니다. call 함수를 사용해서 다른 오브젝트의 메소드를 자기 자신의 메소드처럼 사용할 수 있습니다.

obj.fn(g,b);일때 this에 바인딩되는 것은 obj이지만 obj.fn.call(다른 객체);일경우 this에 바인딩 되는 것은 다른 객체 입니다.

매개변수로서의 함수

함수가 매개변수로 넘어 간다면 함수의 this가 바인딩 되는 시점은 매개변수로 넘어간 함수가 호출되는 시점입니다.

new 키워드 함께

new obj.fn(g,b)에서 this 는 new에 의해 생긴 완전히 새로운 객체에 바인딩 됩니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment