In JavaScript, why typeof Function.prototype is “function”, not “object” like other prototype objects?

console.log(typeof String.prototype); // object
console.log(typeof Number.prototype); // object
console.log(typeof Object.prototype); // object
console.log(typeof Boolean.prototype); // object

console.log(typeof Function.prototype); // function

Why does typeof Function.prototype return "function", not "object" like other prototype objects?

Thank you!



This seems to be defined in ECMAScript 5:

15.3.4 Properties of the Function Prototype Object

The Function prototype object is itself a Function object (its [[Class]] is "Function") that, when invoked, accepts any arguments and returns undefined.


Its mentioned in the ECMAScript2015 :

Th Function prototype object is specified to be a function object to ensure compatibility with ECMAScript code that was created prior to the ECMAScript 2015 specification.

This function object does not actually do anything that a function object is meant to do. You can call it with any arguments & it returns undefined. It is a dumb wrt. function object. It's a normal prototype object.

And since it's just there for compatibility reasons, it does not even has a prototype property.

For more elaboration, you can refer this answer: enter link description here


Because function is a native object which among other properties has internal [[Construct]] and [[Call]] properties and also explicit prototype property — the reference to a prototype of the future objects. And its class is function.

F.[[Class]] = "Function"
F.[[Call]] = <reference to function> // function itself

Thus [[Call]] besides the [[Class]] property (which equals to "Function") is the main in respect of objects distinguishing. Therefore the objects having internal [[Call]] property are called as functions. The typeof operator for such objects returns "function" value.

see for reference


Since it has all the methods and props that any function is ought to have, this makes it effectively a function ...

Think about it for a moment and let it sink and you'll get the picture by then :)


Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.