본문 바로가기

Front/Java Script

전역객체 / this & this의 제어

 

전역객체 (window/global)

 

모든 객체는 전역객체의 프로퍼티 이다.

전역객체의 이름은 호스트 환경에 따라 다를 수 있다. (웹브라우저 : window / node.js : global)

 

function func(){

   console.log('hello?');

}

func();

window.func();  // 위의 코드와 실행결과가 같음. // 점(.)이 있고, 그 앞에 있는 것은 객체이며, func함수는 window객체 안의 메소드 이다.

 

 


 

 

this

함수의 호출 맥락에 따라서, 상황에 따라서 달라진다.

함수나 메소드에서 this는 그 함수가 속해있는 객체를 가리킨다.

 

 

생성자에서의 this

 

var funcThis = null;

 

function Func(){

  funcThis = this;

}

 

var o1 = Func();

if(funcThis === window){    // 전역에서 Func함수를 실행했을때, 함수내의 this는 window가 된다.

   console.log('window');

}

 

var o2 = new Func();   // new를 이용해서 생성자를 호출하면 객체가 생성&반환 되므로 o2는 객체이다.

if(funcThis === o2){    // o2객체 안에서 this를 나타내므로 funcThis는 o2가 된다.

   console.log('o2');

}

 

*생성자 Func안에서는 o2라는 객체를 참조할 수 없다. 아직 초기화가 되기 전이기 때문에.

 

 


 

함수도 객체이다???

 

원래 함수를 생성하는 방법은 아래와 같다.

var sum = new Function('x', 'y', 'return x+y;');

 

그러나 마지막인자인 함수의 본문이 길어지면 불편하므로,

우리가 평소에 사용하는 함수정의하는 방법인 함수 리터럴을 사용하는 것이다.

함수 리터럴를 사용해서 함수를 정의하면 다음과 같다.

 

function sum(x, y){

   return x+y;

}

 

함수도 new를 이용해서 생성되므로 '객체'라고 할 수 있다.

그리고 그 객체안에 apply 와 call이라는 메소드를 가지고 있다.

 

apply와 call을 이용해서 this를 제어할 수 있다.

(참고) 함수의 호출(call & apply)  bol-bbang.tistory.com/48

 

 

 

 

 

 

 

출처

opentutorials.org/course/743/6571