본문 바로가기

Javascript/기초공부

[Javascript: this] 전역객체 / 함수, 메소드, 생성자와 this / apply와 call / apply와 this

전역객체

자바스크립트에서 모든 객체전역객체의 property이다.

function func() {
    alert('Hello');
}
// 둘다 같은 결과
func();
window.func();

모든 전역변수와 함수window 객체의 property이다.

* nodejs의 전역객체global이다.

this

함수 내에서 함수 호출 맥락(context)를 의미한다.

함수 호출

function func() {
  if(window === this)
    alert("window === this");
}
func(); // window === this

함수에서 this는 전역객체인 window이다.

 

메소드 호출

var o = {
  func: function() {
    if(o === this)
      alert('o === this');
  }
}
o.func(); // o === this

메소드에서 this는 메소드가 소속된 객체를 가리킨다.

 

생성자 호출

var funcThis = null;
function Func() {
    funcThis = this;
}

var o1 = Func(); // new가 없을 때
if(funcThis === window) {
    document.write('window <br />'); // window
}
var o2 = new Func(); // new가 있을 때
if(funcThis === o2) {
    document.write('o2 <br />'); //o2
}

생성자에서 this는 생성자가 만든 객체를 가리킨다.

 

apply와 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(); // window
func.apply(o); // o
func.apply(p); // p

자바스크립트의 유연성을 잘 보여주는 예제.

apply 함수를 호출하는 객체가 this이다.