• 회원가입
  • 로그인
  • 구글아이디로 로그인

[Basic] JS - this 키워드 ★★★★★ - 호출 방식에 따라 지시 대상 다름. (= 디스 키워드)

this 예제 

 

<p id="demo"></p>


<script>

// 객체 생성

var hz = {

    site: "홈짱닷컴",

    host : "homzzang.com",

    open     : 2012,

    intro : function() {

        return this.site + " " + this.host;

    }

};

 

// 출력

document.getElementById("demo").innerHTML = hz.intro();

</script>

 

결과보기

PS. this.site 의미: this (= hz 객체)의 site 속성 의미.

 

this 정의

 

this가 속한 객체를 가리킴. 

즉, this가 속한 객체가 뭐냐에 따라 다름.

엄밀히 말하면, 호출 방식에 따라 달라짐.

 



1. 

method (메서드) 안에서는, 해당 method를 소유하는 객 의미.

 

2. 

단독으로는, global object (전역객체) 의미. 

(※ 엄격모드도 마찬가지)

 

3. 

function (함수) 안에서는, global object (전역객체) 의미.

단, strict mode (엄격모드)일 경우엔, undefined 의미.

 

4. 

event (이벤트) 안에선, 해당 이벤트를 받는 요소를 의미.

 

5. 

call() 또는 apply() 메서드 경우, 어떤 객체를 가리키게 할 수 있음.

 

 

1. method 안의 this

 

object method (객체 메서드) 에서의 this는 해당 method를 소유하는 객체를 의미.

맨 위 예제 경우, this는 hz 객체 (= intro 메서드를 소유하는 객체) 임.

 


PS. this 키워드는 hz 객체 가리키나 실제 찍어보면 [object Objct] 나옴.

 

<p id="demo"></p>


<script>

var hz = {

    site: "홈짱닷컴",

    host : "homzzang.com",

    open : 2012,

    intro : function() {

        return this;

    }

};


document.getElementById("demo").innerHTML = hz.intro();

</script>

 

결과보기 결과값: [object Object] 

 

2. 단독 사용 this

 

this의 소유자는 global object (전역객체)이며, this는 전역객체를 가리킴.

브라우저 창에서, global object (전역객체)는 [object Window] 임. 즉, window 객체임.

Strict mode (엄격모드)에서도 마찬가지.

 


[기본 모드]

 

<p id="demo"></p>


<script>

var x = this;

document.getElementById("demo").innerHTML = x;

</script>

 

결과보기  ※ 결과값: [object Window]


[엄격 모드]

 

<p id="demo"></p>


<script>

"use strict";

var x = this;

document.getElementById("demo").innerHTML = x;

</script>

 

결과보기  ※ 결과값: [object Window]

 

3. 함수 안 this

 

함수 안 this는 기본 모드 상태인지, strict (엄격) 모드 상태인지 여부에 따라 달라짐. 

기본 모드 일 땐, 해당 함수를 소유하는 global object (전역객체)인 [object Window] 의미.

그러나, strict mode (엄격 모드)일 땐, 이런 연결 무시하고 undefined (비정의 상태) 의미.

 


[기본 모드]

 

<p id="demo"></p>


<script>

document.getElementById("demo").innerHTML = homzzang();

function homzzang() {

    return this;

}

</script>

 

결과보기 결과값: [object Window]


[엄격 모드]

 

<p id="demo"></p>


<script>

"use strict";

document.getElementById("demo").innerHTML = homzzang();

function homzzang() {

  return this;

}

</script>

 

결과보기 결과값: undefined

 

4. 이벤트 핸들러 안 this

 

이벤트 핸들러 안 this는 해당 이벤트를 받는 요소 의미.

(아래 예제 경우, button 요소 의미.)

 


예제

 

<button onclick="this.style.display='none'">클릭</button>

 

결과보기

 

5. call()・apply() 같은 명시함수 안 this

 

call()apply() 메서드는 미리 정의된 JS 함수임.

둘 다 다른 객체를 매개변수로 사용해 객체 메서드 호출 가능.



 

<p id="demo"></p>


<script>

var mysite = {

    textplus: function() {

        return this.site + " " + this.host;

    }

}

var hz = {

  site:"홈짱닷컴",

  host: "Homzzang.com",

}

var res = mysite.textplus.call(hz); 

document.getElementById("demo").innerHTML = res; 

</script>


결과보기 결과값: 홈짱닷컴 Homzzang.com

PS.

call() 함수 사용해 매개변수로 hz 객체를 갖는 mysite.textplus 메서드를 호출하면,

this 키워드는 비록 mysite.textplus 메서드 안에 있지만, 실제로는 hz 객체 가리킴.

 

PS.

아래 1, 2, 3 결과가 모두 다름.

 

<button id="btn">버튼</button>

 

<script>

var someone = {

  name: 'codejong',

  whoAmI: function () {

    console.log(this);

  },

};


someone.whoAmI(); // 1. object ...


var myWhoAmI = someone.whoAmI;

myWhoAmI(); // 2. window ...


var btn = document.getElementById('btn');

btn.addEventListener('click', someone.whoAmI);// 3. <button> ...

</script>

 

코드종 님 - JS : this 키워드

https://youtu.be/PAr92molMHU 

 

mdn this 키워드

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/this


분류 제목
js JS - Keyboard KeyCode (키보드키코드 = 키보드키번호 = 키보드키조회 = 키보드코드 = 키보…
js JS - ctrlKey, altKey, shiftKey 속성 - Ctrl키, Alt키, Shift키 눌림여부…
js JS - 숫자만 입력 가능
js JS - 클릭버튼생성 (= 클릭탭생성), 자식요소개별아이디부여, 클릭요소삭제 (= 클릭요소제거 = 클릭부모요…
js JS - F12키차단 (=개발자도구차단) + 마우스오른쪽금지 (= 마우스오른쪽차단 = 불펌방지 = 클릭방지)
js JS - Drag & Drop (= Draggable) - 요소이동 (= 요소끌어이동 = 드래그앤드롭 = 드…
js JS - INPUT입력값을 GET방식으로 넘기기 (=인풋값, 인풋입력밧, 겟방식전달)
HTML_Objects JS - <thead> 객체 - 테이블머리글그룹 (= 테이블헤드그룹 = thead태그 = 티헤드태그) (HT…
js JS - 아이피 유효성검사 (= 아이피 유효성체크 = 아이피 적합성검사 = 아이피 적합성체크)
DOM_Event JS - DOMContentLoaded 이벤트 ★★★★★ - 돔 웹문서 로드 완료 이벤트(= DOMConte…
js JS - Lazyload (레이지로드)
js JS - 스크롤고정 스크롤스파이 메뉴 (= 매뉴얼메뉴 Smooth Scrolling Sticky Scroll…
js JS - 마우스오버 시, 오디오재생 (= mp3재생 = 소리재생)
js JS - 숫자제거 공백제거 정규표현식
js JS - 3D 입체 영상 (= 입체 화면 = 이미지 파노라마 360도 회전 영상 = Image Panoram…
js JS - m3u8 ★ (동영상재생 + 플레이어 다운 + 동영상다운로드 : 엠삼유팔 = 엠쓰리유팔 )
js JS - 이전페이지 보내기 (= 기존페이지로 돌아가기) 3가지방법
js JS - 각종 게임 무료다운로드 주소 좌표 (= 게임다운좌표)
js JS - 서브도메인 입력 후 해당 주소로 이동
js JS - 예약어 (= 변수명・라벨명・함수명 등으로 사용 불가능한 단어)
62/67
목록
찾아주셔서 감사합니다. Since 2012