• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

isPrototypeOf 관련 질문드립니다!

20.06.16 20:02 작성 조회수 171

0

몰입! 자바스크립트 167페이지 질문입니다!

var obj = new Object();
console.log(Object.prototype.isPrototypeOf(obj));
console.log(Object.isPrototypeOf(obj));
이 두 줄이 왜 차이가 나는지 잘 모르겠습니다.
저술하신 바에 따르면, Object 오브젝트에는 스태틱 멤버가 없는 것으로 보입니다.
그렇다면 밑의 Object.isPrototypeOf()메서드는 결국 프로토타입 체이닝을 타고 올라간 Object.prototype.isPrototype을 호출한 것이 아닌가요?
만약 프로토타입 체이닝을 타고 올라간 것이 아니라면 오브젝트가 가지고 있지 않은 메서드를 호출한 것으로 오류가 발생해야 할 것 같은데...

오브젝트의 프로토타입에 연결되어 있는 것이 오브젝트 자체가 아닌 인스턴스라는 것은 어찌저찌 이해가 되고, 
Object.prototype이 그 인스턴스를 참조하고 있기에 첫번째 console.log의 출력값이 true인 것은 이해가 되는데,
두번째 console.log의 출력값은 에러가 안 뜨는 것이 이해가 되질 않습니다.
스태틱 멤버로 가지고 있는 것이 아니라면 프로토타입 체이닝을 타고 올라가서 호출했다는 얘긴데... 그럼 첫번째 console.log와 출력값이 동일해야 하는 것 아닌가 싶어서요.
제가 어떤 부분을 놓치고 있는 걸까요?

답변 1

답변을 작성해보세요.

0

생각을 많이 한 질문입니다^^ 좋은 질문입니다.

결국 프로토타입 체이닝을 타고 올라간 Object.prototype.isPrototype을 호출한 것이 아닌가요?
==> 맞습니다. 아래 1번과 2번의 설명 및 구조를 살펴보기 바랍니다.

var check = Object;
1. check에 빌트인 Object가 할당됩니다.
-  또한 check.__proto__에 Function.prototype에 연결된 메소드가 있습니다.
-  또한 check.__proto__.__proto__에 Object.prototype에 연결된 메소드가 있습니다.
2. Object.isPrototypeOf(obj)를 호출하면 check.__proto__.__proto__의
-  isPrototypeOf(obj)가  호출됩니다.

-------------------

두번째 console.log의 출력값은 에러가 안 뜨는 것이 이해가 되질 않습니다.
3. Object.prototype.isPrototypeOf(obj)에서
-   isPrototypeOf() 앞의 Object.prototype으로 obj를 생성하므로
-  즉, obj에 Object.prototype이 있으므로 true입니다.

4. Object.isPrototypeOf(obj)에서
-  isPrototypeOf() 앞의 Object는 함수/프로퍼티가 포함된 Object 전체이므로
-  즉, obj에 Object 전체가 없으므로 false가 반환됩니다.