javascript
[생활코딩]this
소영
2021. 4. 26. 01:07
this란
객체의 소속인 메소드의 this는 그 객체를 가르킨다.
var o ={
func : function(){
if(o===this){
document.write('o === this');
}
}
}
var funcThis = null;
function Func(){
funcThis = this;
}
var o1 = Func();
if(funcThis === window){
document.write('window <br />');
}
var o2 = new Func(); //생성자를 만들었을때 생성자 안에서 this가 됨 (new로 하였을때 o2가 this가 됨)
if(funcThis === o2){
document.write('o2 <br />');
}
생성자 안에서 this는 그 생성자가 만든 객체이다. 생성자가 실행되기 전까지는 객체는 변수에도 할당 될 수 없다.
function sum(x,y){return x+y;}//함수리터럴
var o ={}//객체리터럴
var a = [1,2,3] , new Array(1,2,3) //배열리터럴
객체-주인(master)
메소드-노예(slave)
함수의 메소드인 apply,call을 이용하면 this의값을 제어할 수 있다.
자바스크립트함수는 메소드가 객체에 강하게 종속되는 다른 객체 지향 언어와는 다르게,
일반적인객체에서의 메소드보다 위상이 높고,
그럼에도 함수를 어떻게 호출하느냐에 따라 함수는 어떤 객체에 각각 종속되기도 하며,
함수 자체로도 객체가 될 수 있다.
요약
1.this가 객체에 종속되어있지 않다면, 보통 window를 가르킨다.
2.생성자를 만들면 그 생성자가 this가 된다. 하지만 생성자가 실행되기 전까지는 undefined이다.
3.메소드인 apply,call로 this값을 제어할 수 있는데, 이는 this가 가르키는 객체와 메소드의 관계가 수평적이라는 것으로 볼 수 있다.(이것은 자바스크립트의 객체지향언어가 다른 객체지향언어에서의 메소드가 견고하게 종속된 것과는 다른 방식이다.)