자신이 속한 객체나 인터페이스를 가리키는 참조변수다.
객체의 메서드는 객체의 프로퍼티를 참조하고 변경 할 수 있어야 한다.
참조 방법 중에 식별자로 참조 하는 방법이 있다.,
const circle = {
a: 5,
b():{
return circle.a+2
}
}
console.log(circle.b())
하지만 생성자 함수의 경우 생성자 함수를 정의하는 시점에는 아직 인스턴스를 생성하기 이전이므로 새엇ㅇ자 ㅎ마수가 생성할 인스턴스를 가리키는 식별자를 알 수 없다. 그래서 특수한 식별자가 필요하고 js는 this라는 특수한 식별자를 제공한다.
this는 js엔진에 의해 암묵적으로 생성된다.
this는 함수가 어떻게 호출되엇는지에 따라 동적으로 결정된다.
함수 호출방식은 4가지가 있다.
일반 함수로 호출된 모든 함수(중첩함수, 콜백함수)내부의 this는 전역객체가 바인딩된다.
function foo(){
console.log(this) //window
function bar(){
console.log(this) //window
}
bar()
}
foo()
다만 this는 객체의 프로퍼티나 메서드를 참조하기 위한 자기 참조 변수 이므로 객체를 생성하지 않는 일반함수에서는 this 의미가 없다.
strict mode가 적용된 일반 함수에서 this는 undefiend가 바인딩 된다.
객체의 메서드는 프로퍼티를 변경하기 위한 건데 메서드 안에 중첩함수나 콜배함수는 객체를 가리키지 않기 때문에 헬퍼함수로 동작하기 어렵다.
그래서 메서드 내부의 중첩함수나 콜백함수의 this 바인딩을 메서드의 this 바인딩과 일치 시키는 방법도 있다.
메서드를 호출한 객체가 this에 바인딩
인스턴스가 바인딩 된다.
첫번째 인수로 전달한 특정 객체