As we know everything in Javascript inherits from Object
:
So if I create an object using constructor function like below:
function Rabbit() {
this.color = 'White'
}
let obj = new Rabbit();
alert(Rabbit.__proto__ === Function.prototype) //true
alert(obj.__proto__ === Rabbit.prototype) //true
alert(obj.__proto__.__proto__ === Object.prototype) //true
alert(Function.__proto__ === Object.prototype) //false
alert(Object.getPrototypeOf(Function) === Object.getPrototypeOf(Object)) //true
The first 3 results make sense because obj
inherits from Rabbit
function which itself inherits from Function
. But if Function
inherits from Object
then why is the 4th result False
. Also why do both Object
and Function
have same prototype (last result)?
Can someone explain this behavior. Am i missing something here?
Problems like this are better explained with images (like the one in your question):
Legend:
blue color = objects
{} = simple object (+constructor name)
Ⓟ = prototype object (+constructor name)
magenta color = functions (ƒ + function name)
Basically, the __proto__
chain for functions is:
concrete function (e.g. Rabbit, Object or Function itself)
-> abstract function (aka Function.prototype)
-> Object.prototype
-> null