📌
Javascript 생활코딩
  • 자바스크립트
  • 자바스크립트 기본
    • 숫자와 문자
    • 변수
    • 주석, 줄바꿈과 여백
    • 조건문 - 기본
    • 조건문 - 비교연산자
    • 조건문 - 논리연산자
    • 조건문 - boolean의 대체재
    • 반복문 - 기본 (while,for)
    • 반복문 - 제어(break, continue)
    • 반복문 - 중첩
    • 함수
    • 배열 - 기본
    • 배열 - 조작, 제거 및 정렬 메서드
    • 객체 - 기본
    • 객체 - 반복문
    • 모듈
    • UI와 API 그리고 문서보는 법
    • 정규표현식
  • 함수지향
    • 유효범위
    • 값으로서의 함수와 콜백
    • 클로저
    • arguments
    • 함수의 호출
  • 객체지향
    • 객체지향 프로그래밍
    • 생성자와 new
    • 전역객체
    • this
    • 상속
    • prototype
    • 표준 내장 객체의 확장
    • Object
    • 데이터 타입
    • 참조
  • 패턴
    • 재귀함수
Powered by GitBook
On this page
  • 함수호출
  • 메소드의 호출
  • 생성자의 호출
  • apply, call

Was this helpful?

  1. 객체지향

this

this는 함수 내에서 함수 호출 맥락(context)를 의미합니다. 맥락이라는 것은 상황에 따라서 달라진다는 의미인데 즉 함수를 어떻게 호출하느냐에 따라서 this가 가리키는 대상이 달라진다는 뜻입니다. 함수와 객체의 관계가 느슨한 자바스크립트에서 this는 이 둘을 연결시켜주는 실질적인 연결점의 역할을 합니다.

함수호출

함수를 호출했을 때 this는 무엇을 가르키는지 살펴봅시다. this는 전역객체인 window와 같습니.

function func(){
    if(window === this){
        document.write("window === this");
    }
}
func(); 
//window === this

메소드의 호출

객체의 소속인 메소드의 this는 그 객체를 가르킵니다.

var o = {
    func : function(){
        if(o === this){
            document.write("o === this");
        }
    }
}
o.func();
//o === this

생성자의 호출

아래 코드는 함수를 호출했을 때와 new를 이용해서 생성자를 호출했을 때의 차이를 보여줍니다.

var funcThis = null; 
 
function Func(){
    funcThis = this;
}
var o1 = Func();
if(funcThis === window){
    document.write('window <br />');
}
 
var o2 = new Func();
if(funcThis === o2){
    document.write('o2 <br />');
}
//window 
//o2

생성자는 빈 객체를 만듭니다. 그리고 이 객체내에서 this는 만들어진 객체를 가르킵니다. 이것은 매우 중요한 사실입니다. 생성자가 실행되기 전까지는 객체는 변수에도 할당 될 수 없기 때문에 this가 아니면 객체에 대한 어떠한 작업을 할 수 없기 때문입니다.

function Func(){
    document.write(o);
}
var o = new Func();
//undefined

apply, call

함수의 메소드인 apply, call을 이용하면 this의 값을 제어할 수 있습니다.

var o = {}
var p = {}
function func(){
    switch(this){
        case o:
            document.write('o<br />');
            break;
        case p:
            document.write('p<br />');
            break;
        case window:
            document.write('window<br />');
            break;          
    }
}
func();
func.apply(o);
func.apply(p);
/*
window
o
p
*/
Previous전역객체Next상속

Last updated 4 years ago

Was this helpful?