In Javascript, any "function object" has a prototype
> F = function() {}
F()
> F.prototype
F {}
But "object" or "instance" doesn't have a prototype
> o = {}
Object {}
> o.prototype
undefined
> f = new F()
F {}
> f.prototype
undefined
However, the built-in object "Function" and "Object" have a prototype:
> Function.prototype
Empty()
> Object.prototype
Object {}
This looks quite confusing for me.
Function
and "function object" have a prototype property
Object
has a prototype property, but "object literal" and "instance object" doesn't have a prototype property
What does the prototype
property actually mean? In the example above, shouldn't the prototype
property of f
be F
?
Does anyone have ideas about how to explain this? Thanks!
Don't confuse the prototype attribute of a function with the internal prototype of an object (which places the object in the prototype chain).
Function
and Object
are constructor functions, as such, they have a prototype attribute, which will be assigned as the internal prototype of objects created with these constructor functions.
I recommend Eloquent Javascript 's chapter "The secret life of objects" , particularly for this quote:
It is important to note the distinction between the way a prototype is associated with a constructor (through its
prototype
property) and the way objects have a prototype (which can be retrieved withObject.getPrototypeOf
). The actual prototype of a constructor is Function.prototype since constructors are functions. Itsprototype
property will be the prototype of instances created through it but is not its own prototype.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.