• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 ES6 수업 class, extends, getter, setter 연습문제 3번질문

ES6 수업 class, extends, getter, setter 연습문제 3번질문

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #45803

    이성수
    참가자
    3번 문제입니다. 
    
    우선 코드는
    
    class Dog {
        constructor(type, color) {
            this.type = type;
            this.color = color;
        }
        getAYearOld() {
            if (this instanceof Cat) {
                return this.age++;
            }
        }
    }
    class Cat extends Dog {
        constructor(type, color, age) {
            super(type, color);
            this.age = age;
        }
    }
    const cat1 = new Cat('Nuri', 'yellow', 10);
    console.log(cat1); // Cat { type: 'Nuri', color: 'yellow', age: 10 }
    console.log(cat1.getAYearOld()); // 10
    
    이렇게 짜서 돌려보았는데 getAYearOld 함수가 작동을 하지 않습니다. 
    
    우선 getAYearOld 함수가 Dog 클래스에 prototype으로 들어가있고, Cat 클래스는 Dog 클래스를 extends 했기 때문에 
    부모 prototype인 getAYearOld 함수를 가져와서 사용할 수 있다는 부분은 이해했습니다. 
    
    IDE(WebStrom)에서는 getAYearOld 함수 속의 변수 age를 인식하지 못하고 있는(Unresolved variable age) 상황이지만 
    
    Unresolved variable age 
    
    어차피 Cat 클래스의 인스턴스 cat1에서 getAYearOld() 함수를 가져온다면 if 조건절 속의 this는 cat1 인스턴스를 가리킬거라 문제는 없다고 판단하였고,  
    MDN 문서상에서 설명하는 대로 instanceof 연산자의 사용법이 Object instanceof Constructor 형식이라면 더더욱 옳게 코드를 짠 것이라고 생각하였습니다. 
    
    하지만 실제로 console.log(cat1.getAYearOld()); 를 통해 getAYearOld 함수를 호출시켜보면 코드가 전혀 작동을 하지 않아서 당황스럽습니다. 
    
    한참을 찾아도 이유를 모르겠어서 질문드립니다. 
    
    
    #45807

    이성수
    참가자
    죄송합니다 바로 해결했습니다. 
    ca1 객체에서 함수를 실행해주면 나이를 올려준 채로 결과값을 뿌려주는게 아니라 그냥 나이를 올려주고 끝나버리니
    cat1.getAYearOld(); 함수를 실행시킨 뒤에 cat1 객체를 뿌려보니 바로 제대로 뜨네요
    
    머리가 굳었었나봅니다 ㅎㅎ
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠