MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Object.prototype

De Object.prototype eigenschap vertegenwoordigt het Object prototype object.

Property attributes of Object.prototype
Writable no
Enumerable no
Configurable no

Beschrijving

Alle objecten in JavaScript zijn afstammelingen van het Object; alle objecten erven methode's en eigenschappen van Object.prototype, althans kunnen ze overschreden worden (behalve een Object met een null prototype, i.e Object.create(null)). Bijvoorbeeld, een andere constructors' prototypes overschrijden de constructor eigenschap en voorzien hun eigen  toString() methode's.

Veranderingen in het Object prototype object zijn zichtbaar voor alle objecten door prototype chaining, tenzij de eigenschappen en methode's onderworpen door deze veranderingen worden overschreden verderop de prototype chain. Dit voorziet een vrij krachtig althans potentieel gevaarlijk mechanisme om het gedrag van een object te overschrijden of aan te vullen.

Eigenschappen

Object.prototype.constructor
Beschrijft de functie dat het object's prototype aanmaakt.
Object.prototype.__proto__
Wijst aan het object welke was bebruikt als prototype wanneer het object was geinstantieerd.
Object.prototype.__noSuchMethod__
Laat het toe om een functie te definieeren dat zal worden uitgevoerd wanneer een ongedefinieerd lid van een object word geroepen als een methode. 
Object.prototype.__count__
Used to return the number of enumerable properties directly on a user-defined object, but has been removed.
Object.prototype.__parent__
Used to point to an object's context, but has been removed.

Methode's

Object.prototype.__defineGetter__()
Associeert een functie met een eigenschap dat, wanneer toegankelijk, een functie uitvoerd en zijn keert zijn return waarde terug.
Object.prototype.__defineSetter__()
Associeert een functie met een eigenschap dat, wanneer gezet, een functie uitvoerd dat de eigenchap veranderd.
Object.prototype.__lookupGetter__()
Keert de functie geassocieert met de gespecificieerde eigenschap door de __defineGetter__() methode.
Object.prototype.__lookupSetter__()
Keert de functie geassocieert met de gespecificieerde eigenschap door de __defineSetter__() method.
Object.prototype.hasOwnProperty()
Keert een boolean terug die aanwijst of een object dat de eigenschap bevat als een directe eigenschap van dat object en niet wordt geerfd door de prototype chain.
Object.prototype.isPrototypeOf()
Keert een boolean waarde terug die aanwijst of het object in de prototype chain zit van het object van waaruit deze methode is geroepen.
Object.prototype.propertyIsEnumerable()
Keert een boolean waarde terug die aanwijst of de ECMAScript [[Enumerable]] attribute is gezet.
Object.prototype.toSource()
Keert een string terug die de bron van een object zijn literal, die het object waarop deze methode word op geroepen represedenteerd; je kan deze waarde gebruiken om een niew object te maken.
Object.prototype.toLocaleString()
Roept toString().
Object.prototype.toString()
Keert een string representatie terug van het object.
Object.prototype.unwatch()
Verwijderd een watchpoint van een eigenschap van het object.
Object.prototype.valueOf()
Keert een primitive waarde terug van het gespecifieerde object.
Object.prototype.watch()
Voegt een watchpoint toe aan de eigenschap van het object.
Object.prototype.eval()
Used to evaluate a string of JavaScript code in the context of the specified object, but has been removed.

Voorbeelden

Als het gedrag van bestaande Object.prototype's methode's worden veranderd, overweeg code te injecteren door je uitbreiding in te wikkelen voor of achter de bestaande logica. Bijvoorbeeld, deze (ongeteste) code zal onvoorwaardelijk aangepaste logica uitvoeren vooralleer de ingebouwde logica of anderman's uitbreiding word uitgevoerd.

Wanneer een functie is geroepen zullen de argumenten worden gehouden in de array-achtige "variable" van de argumenten. Bijvoorbeeld, in de call "myFn(a, b, c)", zullen de argumenten binnenin myFn's lichaam 3 array elementen bevatten die coressponderen tot (a, b, c).  Wanneer prototype's met haken worden bijgewerkt, voer simpelweg deze & de argementen (de call toestand) toe aan het huidig gedrag door apply() te roepen op de functie. Dit patroon can worden gebruikt voor elk prototype, zoals Node.prototype, Function.prototype, etc.

var current = Object.prototype.valueOf; // Since my property "-prop-value" is cross-cutting and isn't always // on the same prototype chain, I want to modify Object.prototype: Object.prototype.valueOf = function() { if (this.hasOwnProperty("-prop-value") {   return this["-prop-value"];   } else {   // It doesn't look like one of my objects, so let's fall back on   // the default behavior by reproducing the current behavior as best we can.   // The apply behaves like "super" in some other languages.   // Even though valueOf() doesn't take arguments, some other hook may.   return current.apply(this, arguments);   } }

Doordat JavaScript geen sub-classe object bevat, prototype is een handige workaround om een "base class" object aan te maken van bepaalde functie's die zich gedragen als objecten. Bijvoorbeeld:

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();

Specificaties

Specificatie Status Commentaar
ECMAScript 1st Edition (ECMA-262) Standard Initiale definitie. Geimplemented in JavaScript 1.0.
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.prototype' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.prototype' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Object.prototype' in that specification.
Draft  

Browser ondersteuning

Soort Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basis Ondersteuning (Yes) (Yes) (Yes) (Yes) (Yes)
Soort Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basis Ondersteuning  
(Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

See also

Documentlabels en -medewerkers

 Aan deze pagina hebben bijgedragen: tdbruy
 Laatst bijgewerkt door: tdbruy,