Get to know MDN better
The prototype data property of a Function instance is used when the function is used as a constructor with the new operator. It will become the new object's prototype.
Note: Not all Function objects have the prototype property — see description.
An object.
| Writable | yes |
| Enumerable | no |
| Configurable | no |
Note: Classes are a type of function, so most of the description here applies to the prototype property of classes too. The only salient difference is that the prototype property of a class is not writable.
When a function is called with new, the constructor's prototype property will become the resulting object's prototype.
You can read Inheritance and the prototype chain for more information about the interactions between a constructor function's prototype property and the resulting object's prototype.
A function having a prototype property is not sufficient for it to be eligible as a constructor. Generator functions have a prototype property, but cannot be called with new:
Instead, generator functions' prototype property is used when they are called without new. The prototype property will become the returned Generator object's prototype.
In addition, some functions may have a prototype but throw unconditionally when called with new. For example, the Symbol() and BigInt() functions throw when called with new, because Symbol.prototype and BigInt.prototype are only intended to provide methods for the primitive values, but the wrapper objects should not be directly constructed.
The following functions do not have prototype, and are therefore ineligible as constructors, even if a prototype property is later manually assigned:
The following are valid constructors that have prototype:
A bound function does not have a prototype property, but may be constructable. When it's constructed, the target function is constructed instead, and if the target function is constructable, it would return a normal instance.
A function's prototype property, by default, is a plain object with one property: constructor, which is a reference to the function itself. The constructor property is writable, non-enumerable, and configurable.
If the prototype of a function is reassigned with something other than an Object, when the function is called with new, the returned object's prototype would be Object.prototype instead. (In other words, new ignores the prototype property and constructs a plain object.)
Class fields add properties to each instance. Class methods declare function properties on the prototype. However, there's no way to add a non-function property to the prototype. In case you want to share static data between all instances (for example, Error.prototype.name is the same between all error instances), you can manually assign it on the prototype of a class.
This can be made more ergonomic using static initialization blocks, which are called when the class is initialized.
| ECMAScript® 2027 Language Specification # sec-function-instances-prototype |
This page was last modified on Jul 10, 2025 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.