📝
서은 STUDY_SCRIPT
  • JAVASCRIPT 기록
  • JAVASCRIPT 문법정리
    • 데이터 저장하기
    • 데이터 불러오기
    • 데이터 실행하기
    • 데이터 제어하기
    • 면접질문 정리
  • PHP를 이용한 사이트 작업
    • PHP와 MySQL
      • 댓글쓰기
      • 회원가입
      • 로그인
      • 게시판
        • 페이지네이션 & 게시글보기
        • 수정/삭제/목록/검색
  • 생활코딩 JavaScript
    • JavaScript 입문수업
      • Basic
        • 자바스크립트 기본 세팅
        • 데이터타입
        • 변수
        • 연산자
        • 조건문
        • 반복문
        • 함수
        • 배열
        • 객체
        • 모듈
        • 정규표현식
      • 함수지향
        • 유효범위
        • 값으로서 함수
        • 값으로서 콜백
        • 클로저
        • arguments
        • 함수의 호출
      • 객체지향
        • 생성자와 new
        • 전역객체
        • this
        • 상속
        • Prototype
        • 표준내장객체의 확장
        • Object
        • 데이터 타입
        • 복제 & 참조
    • JavaScript Basic
      • 자바스크립트란?
      • 데이터타입
      • 변수와 대입연산자
      • 제어할 태그 선택
      • 비교연산자와 불리언
      • 조건문 if
      • 리팩토링
      • 배열 [ ]
      • 반복문 while
      • 배열과 반복문
        • 배열과 반복문의 활용
      • 함수
        • 함수의 활용
      • 객체 { }
        • 객체와 반복문 for~in
        • 프로퍼티와 메소드
        • 객체의 활용
      • 파일로 쪼개서 정리정돈
      • 라이브러리 & 프레임워크
      • UI & API
    • Web Browser
      • JavaScript란?
      • BOM
        • 전역객체 window
        • 사용자와 커뮤니케이션
        • Location 객체
        • Navigator 객체
        • 창 제어
      • DOM
        • 제어 대상 찾기
        • jQuery
        • HTMLElement
        • Element 객체
          • 식별자 API
          • 조회 API
          • 속성 API
        • Node 객체
          • Node 관계 API
          • Node 종류 API
          • Node 변경 API
          • jQuery 노드 변경 API
          • 문자열로 노드 제어
        • HTMLCollection
      • 이벤트
        • 이벤트 등록
        • 이벤트 전파(버블링과 캡처링)
        • 이벤트 기본 동작 취소
        • 이벤트 타입
      • 네트워크 통신
        • Ajax
        • JSON
  • NOMAD JAVASCRIPT
    • VanillaJS
      • Why JS?
      • ES5, ES6
      • Basic
        • Alert & Console
        • Variable
        • Data Types
        • Array & Object
      • Function
      • DOM
        • Event & Event handler
        • Conditional
        • Function Practice
      • Momentum App
        • Making a JS Clock
        • Saving the User Name
        • To-Do List
        • Image Background
        • Getting Weather
  • DREAM CODING
    • 자바스크립트 기초 강의 (ES5+)
      • JavaScript 역사
      • async & defer / Strict Mode
      • Variable / Hoisting / Data Type
      • Operator / if / Loop
      • Function
        • 함수의 선언
        • 함수의 표현
      • Class
      • Object
      • Array
      • Array API
      • JSON
      • Callback
      • Promise
      • Async & Await
  • WEB BOS
    • #JavaScript30
Powered by GitBook
On this page
  • 함수와 this
  • 1. 함수호출
  • 2. 메소드의 호출
  • 3. 생성자의 호출
  • 4. apply, call을 이용한 this의 값 제어

Was this helpful?

  1. 생활코딩 JavaScript
  2. JavaScript 입문수업
  3. 객체지향

this

함수와 this

this는 함수 내에서 함수 호출 맥락(context)를 의미 맥락이라는 것은 상황에 따라서 달라진다는 의미

즉, 함수를 어떻게 호출하느냐에 따라서 this가 가리키는 대상이 달라짐

결과적으로 그 함수가 누구의 소속이냐에 따라서 this의 값은 그 소속, 그 "객체"를 가리킴

1. 함수호출

function func(){
    if(window === this){
        document.write("window === this");
    }
}
func();
// window === this
//this는 전역객체인 window와 같다

2. 메소드의 호출

객체의 소속인 method의 this는 그 객체를 가리킴

var o = {
    func : function(){
        if(o === this){
            document.write("o === this");
        }
    }
}
o.func();  
//o === this (o === window.o)

3. 생성자의 호출

함수를 호출했을 때와 new를 이용해서 생성자를 호출했을 때의 차이

var funcThis = null; 
function Func(){
    funcThis = this;
}
var o1 = Func();
if(funcThis === window){
    document.write('window <br />'); 
} //window
 
var o2 = new Func(); // 이 코드에서 this는 만들어진 o2객체
if(funcThis === o2){
    document.write('o2 <br />');
} //o2

3-1. 생성자를 만들기 전에 함수를 실행했을 때?

생성자는 빈 객체를 만듦 그리고 이 객체 내에서 this는 만들어진 객체를 가리킴 (생성자가 실행되기 전까지는 객체는 변수에도 할당될 수 없기 때문에 this가 아니면 객체에 대한 어떠한 작업을 할 수 없기 때문)

function Func(){
    document.write(o); //생성자가 실행되기 전이라서 아직 o는 객체가 아님
}
var o = new Func();
//undefined

4. apply, call을 이용한 this의 값 제어

var o = {}
var p = {}
function func(){
    switch(this){
        case o:
            document.write('o<br />');
            break;
        case p:
            document.write('p<br />');
            break;
        case window:
            document.write('window<br />');
            break;          
    }
}
func(); //window
func.apply(o); //o
func.apply(p); //p
Previous전역객체Next상속

Last updated 3 years ago

Was this helpful?