인프런 커뮤니티 질문&답변

프린이님의 프로필 이미지

작성한 질문수

[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스

메서드 데코레이터 강좌에서 target이 빈객체인 이유 문의드립니다.

해결된 질문

작성

·

231

·

수정됨

0

이미 동일한 질문이 있지만,

답변글을 읽어봐도, 이해가 되질 않아, 다시 문의 남깁니다.


#1. target이 빈객체인 이유
#2.클래스 Test 코드의 목적



#1. target이 빈객체인 이유

 

' 하지만 prototype chain 강의를 다시 봐보시면 Idol.prototype은 dance 함수를 갖을 수 없습니다.

prototype이 오히려 체인의 위에 있기 때문입니다.'

 

코드에서 어떤 이유 때문에, Idol.prototype은 dance 함수를 갖을 수 없는 걸까요?

체인의 위에 있다라는게 어떤 상황인지 궁금합니다.


dance함수는 Idol.prototype객체에 정의되어 있어, Idol클래스로 만든 모든 인스턴스는 Idol.prototype객체에 정의된 dance함수를 사용 할 수 있다

이외에는, 도무지 생각이 발전이 되질 않습니다.


자바스크립트 강좌를 다시 봤는데, 답변 남겨주신 코멘트 힌트를 발견하기 어려워 도움을 요청드립니다! 그 이유에 대해서 조금 설명을 추가 부탁드립니다!


 

#2. 클래스 Test 코드

class Test{ 
    propertyFunction = function(){ ....} 
    methodFunction(){ .... } 
} 

const instance = new Test(); 
console.dir(Test.prototype, {showHidden: true})

혹시

Test 클래스 예시를 보여주신 이유가,

 

(자바스크립트 강좌에서 설명해주신것 처럼)

인스턴스 메서드는 인스턴스마다 갖는 함수이기 때문에 확인이 안되고,

프로토타입은 공유해서 사용하는 것이기 때문에 확인이 된다는 개념과

그래서 console.dir()메서드에서 확인된다/되지 않는다

 

를 알려주시기 위한 목적일까요?

 

target이 빈 객체인 이유와 연결되어 이해할 내용인지 궁금해서 문의 드립니다!

 

감사합니다! :]

 

답변 1

1

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

(1)

method로 선언할 경우에는 prototype에 정의가 됩니다. property로 정의할때는 인스턴스에 귀속됩니다.

이 부분은 console.dir을 실행한 후 showHidden 프로퍼티를 true로 전환해주면 확인 가능합니다.

아래 예제 첨부 해드립니다.

console.dir(target, {showHidden: true})

 

(2)

prototype의 값들이 일반적인 방법으론 확인이 어려운 이유는 아마 출력이 너무 복잡해지기 때문이지 않을까 생각됩니다.

그렇기때문에 (1)에서처럼 명시적으로 prototype 값들을 모두 출력 해야지만 볼 수 있게 설계 됐지 않을까 생각이 드네요.

 

혹시 제가 질문을 잘못 이해했다면 다시 질문 해주세요!

감사합니다!

프린이님의 프로필 이미지
프린이
질문자

안녕하세요!
귀한 답변 남겨주셔 감사합니다!

음,,죄송한데,

그럼 강좌에서 target이 {}로, 즉 빈 객체로 나오는 이유가

prototype의 값들이 일반적인 방법으론 확인이 어려우기 때문에,

console.log로 하면

target이 {} 로 출력 된걸까요?

즉, 확인이 어려운 것이 console.log에서 빈객체{}로 출력 되는걸까요?

 

그래서

그런 객체의 값을 보기 위해서는

console.dir(target, {showHidden: true})

코드를 알려주신걸까요,

 

method로 선언할 경우에는 prototype에 정의되는건 이해가 되는데,

(=Idol클래스로 생성된 인스턴스의 메서드는 Idol.prototype에 정의되어)

target이 Idol.prototype 이라고 생각되는데요,
강좌에서 빈객체로 {} 나오는 부분이 궁금했습니다

 

글 읽어 주셔 감사합니다!

 

 

 

 

 

 



코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

console.log()로 객체를 봤을때 왜 prototype과 관련된 모든 기능들이 나오지 않는지 제가 정확히 알 수는 없습니다. 이건 JS를 설계한 사람의 의도를 봐야하기 때문이죠. 위에서 답변드린건 '아마도' prototype의 모든 값들을 다 보여주면 객체의 속성이 너무 복잡해지기 때문이지 않았을까라는 제 생각을 말씀 드린겁니다.