Firstly note the actual prototype of an object, as in the thing an object inherits behavior from, is stored in its __proto__ property (in most implementations - thx @the system). The Function object's "prototype" property is its own __proto__, which is special inbuilt function literal singleton object function(){}
(which Chrome's console.log() must print as function Empty() {}
for whatever reason but its the same thing). Since all functions are objects (but not all objects are functions) this object's __proto__ is another special inbuilt literal singleton object [object Object]
. [object Object]
__proto__ is null. [object Object]
is the root of the prototype chain.
Examining the output of this shows how things are arranged (runnable from a command line interpreter).
print( Function.prototype === Function.__proto__ );
var f = new Funtion();
print( f.__proto__ === Function.prototype );
print( f.__proto__ );
print( f.__proto__.__proto__ );
print( f.__proto__.__proto__.proto__ );
Now, built-in JavaScript objects have a property called "class". This property is immutable and set by the JavaScript engine itself. The class is used by JavaScript for special internal purposes. Javascript needs to know this, so it knows Function objects can be invoked for example (as implied in the link from a previous answer given by @thesystem - http://es5.github.com/#x15.3.4). From the spec:
"The value of the [[Class]] internal property is defined by this specification for every kind of built-in object. The value of the [[Class]] internal property of a host object may be any String value except one of "Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", "RegExp", and "String". The value of a [[Class]] internal property is used internally to distinguish different kinds of objects. Note that this specification does not provide any means for a program to access that value except through Object.prototype.toString (see 15.2.4.2)." - http://es5.github.com/#x8.6.2
The "class" of the Function object's prototype AKA function(){}
is "Function". The class of Function is also "Function". When a new object is created Javascript sets its class property directly, based on the class property of its constructor, and this is immutable for the life of the object.