graylobo
527
2021-08-23 13:24:12 작성 2021-08-23 13:31:28 수정됨
2
111

[Javascript]일반 객체변수 프로토타입과 함수객체 변수 프로토타입의 차이




const c1 = {
}
c1.__proto__.someProto1 = 'some1';

function some(name){
}
some.prototype.someProto2 = 'some2';
some.__proto__.someProto3 = 'some3';
const f1 = new some();
f1.__proto__.someProto4 = 'some4';

console.log(c1);
console.log(f1);


1. 일반 객체를 통해 생성한 변수를 보면 Object를 가르키는 Prototype이 1개 이고
함수를 통해 생성한 객체변수는 Object안에 또 Object가 존재해서 Object가 총 2개 인데
이 2개의 Object는 어떤 차이가 있는건가요?


2. 변수명을 통해 프로토타입을 접근할때는 __proto__ 속성, 

    함수명을 통해 프로토타입을 접근할때는 prototype 속성을 사용하는데
    prototype 또한 결국 __proto__ 를 가르키게 될텐데
    함수명.__proto__ 이런식으로 다이렉트로 프로토타입에 접근할수 없는 다른 이유가 있을까요?

질문읽어주셔서 감사합니다

0
  • 답변 2

  • 컴포지트
    2k
    2021-08-23 14:11:43 작성 2021-08-23 14:13:18 수정됨

    1. Object 의 prototype 같습니다. 지금 c1 이라는 객체에 __proto__ 속성 접근해서 뭔가 추가하셨죠? 님 지금 Object.prototype 접근한 것과 다를 게 하나도 없습니다. 그리고 f1의 Prototype 가 왜 2개냐, 말이 2개처럼 보이지 실질적으로 some.prototype 는 Object.prototype 상속이라고 보셔야 맞습니다.


    2. 함수명에 __proto__ 속성으로 접근하셨다고요? 그러면 Function.prototype 속성에 접근한 것과 같습니다. 왜냐면 some 객체는 '함수'이기 때문입니다. 접근할 수 없는게 아니라 의도와 다르게 접근한 겁니다.


    MDN 문서에 님이 원하는 질문에 대한 해결책이 될 겁니다.

    상속과 프로토타입 - JavaScript | MDN (mozilla.org)

  • graylobo
    527
    2021-08-23 20:59:57

    자세한 답변 감사드립니다

  • 로그인을 하시면 답변을 등록할 수 있습니다.