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 propertyObject
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!
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 propertyObject
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!
Share Improve this question edited Jun 30, 2015 at 7:22 Hanfei Sun asked Jun 30, 2015 at 7:20 Hanfei SunHanfei Sun 47.2k41 gold badges135 silver badges252 bronze badges 1-
4
An instance is an object, and objects are not functions.
Object
andFunction
are functions (constructors). Note "object" (as in{}
) vs "Object" as in anything that is a JavaScript object. – elclanrs Commented Jun 30, 2015 at 7:22
1 Answer
Reset to default 9Don'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 remend 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.