This figure again shows that every object has a prototype. Constructor function
Foo
also has its own__proto__
which isFunction.prototype
, and which in turn also references via its__proto__
property again to theObject.prototype
. Thus, repeat,Foo.prototype
is just an explicit property ofFoo
which refers to the prototype ofb
andc
objects.
var b = new Foo(20);
var c = new Foo(30);
What are the differences between __proto__
and prototype
?
The figure was taken from dmitrysoshnikov.com.
Note: there is now a 2nd edition (2017) to the above 2010 article.
__proto__
is the actual object that is used in the lookup chain to resolve methods, etc. prototype
is the object that is used to build __proto__
when you create an object with new
:
( new Foo ).__proto__ === Foo.prototype
( new Foo ).prototype === undefined