It's going to be one day 🍀

안녕하세요! 매일 매일 공부하려고 노력하는 백엔드 개발자 지망생의 공부 흔적입니다.

Front-End/JS

[JS] This

2jin2 2024. 1. 12. 17:56

[공부 내용 정리]

 

파이썬과의 클래스 내의 속성/메서드 지칭하는 방법 비교! 출처 : 노마드 코더

 

this는 객체를 가리키는 참조 변수임.

  • this는 호출되는 위치에 따라 다른 값을 출력함!
  • 어떤 객체의 메소드가 아닌 단독 호출되는 함수의 this는 전역공간을 참조함.
  • window 객체 : 브라우저 환경의 전역공간. Node.js 환경에서의 전역공간은 global이라는 이름을 가짐.

ex) 아래 예제에서 this는 위의 경우에는 window, 아래의 경우에는 myObjd

function a(){ console.log(this) }
a();
// 함수가 전역공간. 즉 윈도우 공간에 있기 때문에 window라고 출력
let myObj = {
    val1: 100,
    func1: function () {
        console.log(this);
    }
}

myObj.func1();
// 함수가 myObj 공간. 즉 myObj 공간에 있기 때문에 myObj라고 출력

 

ex) this가 버튼이 되었을 때

<!DOCTYPE html>
<html lang="ko">
    <head>
        <title></title>
    </head>
    <body>
        <button id="btn1">클릭해봐요!</button>
        <button id="btn2">클릭해봐요!</button>
        <script>
            let myObj = {
                val1: 100,
                func1: function () {
                    console.log(this);
                },
            };

            let test = myObj.func1;

            let button1 = document.getElementById("btn1");
            button1.addEventListener("click", myObj.func1);
			// button1에 클릭이 발생했을 때 myObj.func1을 호출해라.
            
            let button2 = document.getElementById("btn2");
            button2.addEventListener("click", test);
        </script>
    </body>
</html>

 

ex) this 가 가르키는 것은? → 호출한 객체

/ * this */
function sayName(){
  console.log(this.name);
}

var name = 'Hero'; 
//전역으로 선언한 name는 window 객체의 속성임.
// 때문에 window.name === "Hero" 가 성립함.

let peter = {
  name : 'Peter Parker',
  sayName : sayName
}

let bruce = {
  name : 'Bruce Wayne',
  sayName : sayName
}

sayName();
peter.sayName(); 
bruce.sayName();

/* sayName() 함수를 실행했을 때와 
peter, bruce 객체의 sayName 함수를 호출했을 때의 결과를 비교해 보세요 */

 

따라서 this는 어디서 실행을 하냐에 따라 가르키는 것이 계속 달라진다!

 

ex) this로 호텔 각 호텔 방 호출하기

/* this 사용 예시 */

let 호텔 = [{
  '이름' : '하나호텔',
  '위치' : '제주도 제주시 001',
  '가격' : {'A':50000, 'B':30000, 'C':15000},
  '방의개수' : 50,
  '예약자수' : 25,
  '남은방의개수' : function(){return this.방의개수 - this.예약자수}
},{
  '이름' : '둘호텔',
  '위치' : '제주도 제주시 002',
  '가격' : {'A':100000, 'B':60000, 'C':30000},
  '방의개수' : 100,
  '예약자수' : 30,
  '남은방의개수' : function(){return this.방의개수 - this.예약자수}
},{
  '이름' : '셋호텔',
  '위치' : '제주도 제주시 003',
  '가격' : {'A':80000, 'B':50000, 'C':30000},
  '방의개수' : 120,
  '예약자수' : 80,
  '남은방의개수' : function(){return this.방의개수 - this.예약자수}
}];
console.log(호텔[0].남은방의개수());
console.log(호텔[1].남은방의개수());
console.log(호텔[2].남은방의개수());

 

 

this의 특징

this는 함수가 만들어질 때가 아닌 실행 될 때 그 값이 결정됨!

function sayName(){
  console.log(this.name);
}
var name = 'Hero';

let peter = {
  name : 'Peter Parker',
  sayName : sayName
};

let bruce = {
  name : 'Bruce Wayne',
  sayName : peter.sayName
};

bruce.sayName();

→ 따라서 이 상황에서는 this가 bruce를 가르킴. bruce안에서 실행됐으니까!

'Front-End > JS' 카테고리의 다른 글

[JS] DOM  (0) 2024.01.15
[JS] 객체지향 프로그래밍  (0) 2024.01.15
[JS] Type(배열, 객체)  (0) 2024.01.12
[JS] for문/while문  (1) 2024.01.11
[JS] 변수/함수/조건문  (0) 2024.01.10