본문 바로가기
Javascript

Object instanceof Function이 true인 이유

by ginny. 2025. 3. 27.

A instanceof B는
"A의 __proto__ 체인 중에 B.prototype이 있는가?"를 검사함.

 

Object instanceof Function을 평가하는 과정

console.log(Object.__proto__); // Function.prototype
console.log(Function.prototype); // Function 객체의 prototype
console.log(Object.__proto__ === Function.prototype); // true

 

Object.__proto__는 왜 Function.prototype을 가리키는가?

"Object의 __proto__는 Object.prototype이 아니야?"

__proto__는 "객체가 생성될 때 사용한 생성자의 .prototype을 참조"하는 것이지, 무조건 자기 자신의 .prototype 가리키는게 아님.

JavaScript에서 Object, Function 같은 내장 객체들은 함수 객체이면서 생성자 함수라서, 그 자체의 __proto__가 다르게 설정되어 있어.  Object 자체는 일반객체가 아닌 함수(생성자 함수)야!

그래서 Function의 인스턴스처럼 동작하기 때문에 그 __proto__는 Function.prototype을 가리켜.

 

Object (생성자 함수)
   ├── __proto__ → Function.prototype
   ├── prototype → Object.prototype

Function (생성자 함수)
   ├── __proto__ → Function.prototype (자기 자신)
   ├── prototype → Function.prototype

 

 

댓글