Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Revision 964177 of Object.prototype

  • Revision slug: Web/JavaScript/Reference/Global_Objects/Object/prototype
  • Revision title: Object.prototype
  • Revision id: 964177
  • Created:
  • Creator: x2357
  • Is current revision? No
  • Comment change "DontEnum attribute" to "[[Enumerable]] attribute", fix link

Revision Content

{{JSRef}}

The Object.prototype property represents the {{jsxref("Object")}} prototype object.

{{js_property_attributes(0, 0, 0)}}

Description

All objects in JavaScript are descended from {{jsxref("Object")}}; all objects inherit methods and properties from Object.prototype, although they may be overridden (except an Object with a null prototype, i.e. Object.create(null)). For example, other constructors' prototypes override the constructor property and provide their own {{jsxref("Object.prototype.toString()", "toString()")}} methods. Changes to the Object prototype object are propagated to all objects unless the properties and methods subject to those changes are overridden further along the prototype chain.

Properties

{{jsxref("Object.prototype.constructor")}}
Specifies the function that creates an object's prototype.
{{jsxref("Object.prototype.__proto__")}} {{non-standard_inline}}
Points to the object which was used as prototype when the object was instantiated.
{{jsxref("Object.prototype.__noSuchMethod__")}} {{non-standard_inline}}
Allows a function to be defined that will be executed when an undefined object member is called as a method.
{{jsxref("Object.prototype.__count__")}} {{obsolete_inline}}
Used to return the number of enumerable properties directly on a user-defined object, but has been removed.
{{jsxref("Object.prototype.__parent__")}} {{obsolete_inline}}
Used to point to an object's context, but has been removed.

Methods

{{jsxref("Object.prototype.__defineGetter__()")}} {{non-standard_inline}} {{deprecated_inline}}
Associates a function with a property that, when accessed, executes that function and returns its return value.
{{jsxref("Object.prototype.__defineSetter__()")}} {{non-standard_inline}} {{deprecated_inline}}
Associates a function with a property that, when set, executes that function which modifies the property.
{{jsxref("Object.prototype.__lookupGetter__()")}} {{non-standard_inline}} {{deprecated_inline}}
Returns the function associated with the specified property by the {{jsxref("Object.defineGetter", "__defineGetter__")}} method.
{{jsxref("Object.prototype.__lookupSetter__()")}} {{non-standard_inline}} {{deprecated_inline}}
Returns the function associated with the specified property by the {{jsxref("Object.defineSetter", "__defineSetter__")}} method.
{{jsxref("Object.prototype.hasOwnProperty()")}}
Returns a boolean indicating whether an object contains the specified property as a direct property of that object and not inherited through the prototype chain.
{{jsxref("Object.prototype.isPrototypeOf()")}}
Returns a boolean indication whether the specified object is in the prototype chain of the object this method is called upon.
{{jsxref("Object.prototype.propertyIsEnumerable()")}}
Returns a boolean indicating if the internal ECMAScript [[Enumerable]] attribute is set.
{{jsxref("Object.prototype.toSource()")}} {{non-standard_inline}}
Returns string containing the source of an object literal representing the object that this method is called upon; you can use this value to create a new object.
{{jsxref("Object.prototype.toLocaleString()")}}
Calls {{jsxref("Object.toString", "toString()")}}.
{{jsxref("Object.prototype.toString()")}}
Returns a string representation of the object.
{{jsxref("Object.prototype.unwatch()")}} {{non-standard_inline}}
Removes a watchpoint from a property of the object.
{{jsxref("Object.prototype.valueOf()")}}
Returns the primitive value of the specified object.
{{jsxref("Object.prototype.watch()")}} {{non-standard_inline}}
Adds a watchpoint to a property of the object.
{{jsxref("Object.prototype.eval()")}} {{obsolete_inline}}
Used to evaluate a string of JavaScript code in the context of the specified object, but has been removed.

Examples

Since JavaScript doesn't exactly have sub-class objects, prototype is a useful workaround to make a “base class” object of certain functions that act as objects. For example:

var Person = function() {
  this.canTalk = true;
};

Person.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name);
  }
};

var Employee = function(name, title) {
  Person.call(this);
  this.name = name;
  this.title = title;
};

Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

Employee.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name + ', the ' + this.title);
  }
};

var Customer = function(name) {
  Person.call(this);
  this.name = name;
};

Customer.prototype = Object.create(Person.prototype);
Customer.prototype.constructor = Customer;

var Mime = function(name) {
  Person.call(this);
  this.name = name;
  this.canTalk = false;
};

Mime.prototype = Object.create(Person.prototype);
Mime.prototype.constructor = Mime;

var bob = new Employee('Bob', 'Builder');
var joe = new Customer('Joe');
var rg = new Employee('Red Green', 'Handyman');
var mike = new Customer('Mike');
var mime = new Mime('Mime');

bob.greet();
// Hi, I am Bob, the Builder

joe.greet();
// Hi, I am Joe

rg.greet();
// Hi, I am Red Green, the Handyman

mike.greet();
// Hi, I am Mike

mime.greet();

Specifications

Specification Status Comment
{{SpecName('ES1')}} {{Spec2('ES1')}} Initial definition. Implemented in JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.2.3.1', 'Object.prototype')}} {{Spec2('ES5.1')}}  
{{SpecName('ES6', '#sec-object.prototype', 'Object.prototype')}} {{Spec2('ES6')}}  

Browser compatibility

{{CompatibilityTable}}
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}

See also

Revision Source

<div>{{JSRef}}</div>

<p>The <code><strong>Object.prototype</strong></code> property represents the {{jsxref("Object")}} prototype object.</p>

<div>{{js_property_attributes(0, 0, 0)}}</div>

<h2 id="Description">Description</h2>

<p>All objects in JavaScript are descended from {{jsxref("Object")}}; all objects inherit methods and properties from <code>Object.prototype</code>, although they may be overridden (except an <code>Object</code> with a <code>null</code> prototype, i.e. <code>Object.create(null)</code>). For example, other constructors' prototypes override the <code>constructor</code> property and provide their own {{jsxref("Object.prototype.toString()", "toString()")}} methods. Changes to the <code>Object</code> prototype object are propagated to all objects unless the properties and methods subject to those changes are overridden further along the prototype chain.</p>

<h2 id="Properties">Properties</h2>

<dl>
 <dt>{{jsxref("Object.prototype.constructor")}}</dt>
 <dd>Specifies the function that creates an object's prototype.</dd>
 <dt>{{jsxref("Object.prototype.__proto__")}} {{non-standard_inline}}</dt>
 <dd>Points to the object which was used as prototype when the object was instantiated.</dd>
 <dt>{{jsxref("Object.prototype.__noSuchMethod__")}} {{non-standard_inline}}</dt>
 <dd>Allows a function to be defined that will be executed when an undefined object member is called as a method.</dd>
 <dt><s class="obsoleteElement">{{jsxref("Object.prototype.__count__")}} {{obsolete_inline}}</s></dt>
 <dd><s class="obsoleteElement">Used to return the number of enumerable properties directly on a user-defined object, but has been removed.</s></dd>
 <dt><s class="obsoleteElement">{{jsxref("Object.prototype.__parent__")}} {{obsolete_inline}}</s></dt>
 <dd><s class="obsoleteElement">Used to point to an object's context, but has been removed.</s></dd>
</dl>

<h2 id="Methods">Methods</h2>

<dl>
 <dt>{{jsxref("Object.prototype.__defineGetter__()")}} {{non-standard_inline}} {{deprecated_inline}}</dt>
 <dd>Associates a function with a property that, when accessed, executes that function and returns its return value.</dd>
 <dt>{{jsxref("Object.prototype.__defineSetter__()")}} {{non-standard_inline}} {{deprecated_inline}}</dt>
 <dd>Associates a function with a property that, when set, executes that function which modifies the property.</dd>
 <dt>{{jsxref("Object.prototype.__lookupGetter__()")}} {{non-standard_inline}} {{deprecated_inline}}</dt>
 <dd>Returns the function associated with the specified property by the {{jsxref("Object.defineGetter", "__defineGetter__")}} method.</dd>
 <dt>{{jsxref("Object.prototype.__lookupSetter__()")}} {{non-standard_inline}} {{deprecated_inline}}</dt>
 <dd>Returns the function associated with the specified property by the {{jsxref("Object.defineSetter", "__defineSetter__")}} method.</dd>
 <dt>{{jsxref("Object.prototype.hasOwnProperty()")}}</dt>
 <dd>Returns a boolean indicating whether an object contains the specified property as a direct property of that object and not inherited through the prototype chain.</dd>
 <dt>{{jsxref("Object.prototype.isPrototypeOf()")}}</dt>
 <dd>Returns a boolean indication whether the specified object is in the prototype chain of the object this method is called upon.</dd>
 <dt>{{jsxref("Object.prototype.propertyIsEnumerable()")}}</dt>
 <dd>Returns a boolean indicating if the internal <a href="/en-US/docs/Web/JavaScript/Data_structures#Properties">ECMAScript [[Enumerable]] attribute</a> is set.</dd>
 <dt>{{jsxref("Object.prototype.toSource()")}} {{non-standard_inline}}</dt>
 <dd>Returns string containing the source of an object literal representing the object that this method is called upon; you can use this value to create a new object.</dd>
 <dt>{{jsxref("Object.prototype.toLocaleString()")}}</dt>
 <dd>Calls {{jsxref("Object.toString", "toString()")}}.</dd>
 <dt>{{jsxref("Object.prototype.toString()")}}</dt>
 <dd>Returns a string representation of the object.</dd>
 <dt>{{jsxref("Object.prototype.unwatch()")}} {{non-standard_inline}}</dt>
 <dd>Removes a watchpoint from a property of the object.</dd>
 <dt>{{jsxref("Object.prototype.valueOf()")}}</dt>
 <dd>Returns the primitive value of the specified object.</dd>
 <dt>{{jsxref("Object.prototype.watch()")}} {{non-standard_inline}}</dt>
 <dd>Adds a watchpoint to a property of the object.</dd>
 <dt><s class="obsoleteElement">{{jsxref("Object.prototype.eval()")}} {{obsolete_inline}}</s></dt>
 <dd><s class="obsoleteElement">Used to evaluate a string of JavaScript code in the context of the specified object, but has been removed.</s></dd>
</dl>

<h2 id="Examples">Examples</h2>

<p>Since JavaScript doesn't exactly have sub-class objects, prototype is a useful workaround to make a “base class” object of certain functions that act as objects. For example:</p>

<pre class="brush: js">
var Person = function() {
  this.canTalk = true;
};

Person.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name);
  }
};

var Employee = function(name, title) {
  Person.call(this);
  this.name = name;
  this.title = title;
};

Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

Employee.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name + ', the ' + this.title);
  }
};

var Customer = function(name) {
  Person.call(this);
  this.name = name;
};

Customer.prototype = Object.create(Person.prototype);
Customer.prototype.constructor = Customer;

var Mime = function(name) {
  Person.call(this);
  this.name = name;
  this.canTalk = false;
};

Mime.prototype = Object.create(Person.prototype);
Mime.prototype.constructor = Mime;

var bob = new Employee('Bob', 'Builder');
var joe = new Customer('Joe');
var rg = new Employee('Red Green', 'Handyman');
var mike = new Customer('Mike');
var mime = new Mime('Mime');

bob.greet();
// Hi, I am Bob, the Builder

joe.greet();
// Hi, I am Joe

rg.greet();
// Hi, I am Red Green, the Handyman

mike.greet();
// Hi, I am Mike

mime.greet();
</pre>

<h2 id="Specifications">Specifications</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('ES1')}}</td>
   <td>{{Spec2('ES1')}}</td>
   <td>Initial definition. Implemented in JavaScript 1.0.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES5.1', '#sec-15.2.3.1', 'Object.prototype')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td>&nbsp;</td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-object.prototype', 'Object.prototype')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td>&nbsp;</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility">Browser compatibility</h2>

<div>{{CompatibilityTable}}</div>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari</th>
  </tr>
  <tr>
   <td>Basic support</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Android</th>
   <th>Chrome for Android</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE Mobile</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
  </tr>
  <tr>
   <td>Basic support</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
  </tr>
 </tbody>
</table>
</div>

<h2 id="See_also">See also</h2>

<ul>
 <li><a href="/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript">Introduction to Object-Oriented JavaScript</a></li>
</ul>
Revert to this revision