11

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.

  1. Function and "function object" have a prototype property

  2. 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!

1
  • 4
    An instance is an object, and objects are not functions. Object and Function are functions (constructors). Note "object" (as in {}) vs "Object" as in anything that is a JavaScript object. Commented Jun 30, 2015 at 7:22

1 Answer 1

9

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 with Object.getPrototypeOf). The actual prototype of a constructor is Function.prototype since constructors are functions. Its prototype property will be the prototype of instances created through it but is not its own prototype.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.