this -> {?}
자바스크립트에서 this는 어떤 객체를 가리킨다.
"this는 함수를 호출한 객체이다"
console.log(this);
this는 window가 된다.
엄격모드를 활성화해도, this는 window
'use strict';
console.log(this);
자바스크립트 문법을 조금 더 엄격하게 검사해준다.
예를 들어, 변수를 선언하지않고
x = 1;
상단처럼 써준다면, 에러가 발생하지않는다.
그러나 use strict를 써주면 에러가 발생한다.
'use strict';
x = 1;
function main(){
console.log(this);
}
main();
여기서 this는 함수 main을 가리킨다.
"this는 함수를 호출한 객체이다"
main은 window.main 임으로, main안에 this는 window가 된다.
'use strict';
function main(){
console.log(this);
}
main();
use strict 써주면 this는 undefined가 출력된다.
위에처럼 window를 나타내려면 window.main() 이렇게 상세하게 적어주어야한다.
'use strict';
function main(){
console.log(this);
}
window.main();
const object = {
name : '별코딩',
main:function(){
console.log(this); // {name: '별코딩', main: ƒ}
}
}
object.main();
"this는 함수를 호출한 객체이다"
main이 가리키고 있는 것은 object이다.
객체에 다른 속성에 접근 할 때 굉장히 유용하다.
const object = {
name : '별코딩',
main:function(){
console.log(this.name);//별코딩
}
}
object.main();
main함수를 object밖에 써줬었도, 똑같이 출력된다.
function main(){
console.log(this);
}
const object = {
name : '별코딩',
main,
}
object.main(); //{name: '별코딩', main: ƒ}
main 이후에 추가해 줘도, 값은 동일하다.
function main(){
console.log(this);
}
const object = {
name : '별코딩',
}
object.main = main
object.main(); //{name: '별코딩', main: ƒ}
function main(){
console.log(this);
}
const object = {
name : '별코딩',
smallObject : {
name:'작은별코딩',
main,
},
}
object.smallObject.main(); //{name: '작은별코딩', main: ƒ}
main함수를 직접적으로 호출한 객체는 smallObject 임으로 smallObject 값이 나온다.
동적으로 바뀌는 this값을 바뀌지않고, 고정적으로 나오게 하려면 bind를 사용하면된다.
function main(){
console.log(this);
}
const mainBind = main.bind({ name:'h1' });
mainBind();
bind 새로운 함수를 반환해준다.
bind 는 또 bind를 할 수 없다. 한번 더 bind해준 것을 무시하고, 처음 bind해준값만 반환된다.
function main(){
console.log(this);
}
const mainBind = main.bind({ name:'h1' });
const mainBindBind = mainBind.bind({});
mainBindBind(); //{name: 'h1'}
const object = {
name:'별코딩',
main:function(){
console.log(this);
}.bind({ name : '멋진 객체' })
}
object.main(); //{name: '멋진 객체'}
<button type="button" id="btn">버튼</button>
(function(){
const button = document.querySelector('#btn');
button.addEventListener('click', function(e){
console.log(e.target === this); //true
})
})()