JavaScript

[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


분류 제목
DOM_Document JS - styleSheets 속성 - 스타일시트집합
js JS - rules 속성 - styleSheets 객체의 속성
DOM_Event JS - cancelBubble 속성 - 부모요소로 이벤트 확산 방지 (= 상위요소로 이벤트확산취소 = 캔슬…
DOM_Event JS - composedPath() 메서드 - 이벤트객체흐름파악 (=이벤트실행객체경로파악 = 컴포우즈드패스메…
js JS - 특정요소 함수실행제외 (= 배열문자열포함검사) ★★★★★
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…
82/89
목록
 홈  PC버전 로그인 일본어
그누앞단언어
그누뒷단언어
그외코딩언어
그누보드
제작의뢰
Q&A
커뮤니티
웹유틸
회원센터
홈짱닷컴 PC버전 로그인