Object.prototype.constructor

Cette propriété renvoie une référence à la fonction Object qui a créé le prototype de l'instance. La valeur de cette propriété est une référence à la fonction elle-même, ce n'est pas une chaîne de caractères représentant le nom de la fonction. Cette valeur est en lecture seule pour les valeurs de types primitifs comme 1true et "test".

Description

Tous les objets héritent d'une propriété constructor de leur prototype :

var o = {};
o.constructor === Object; // true

var a = [];
a.constructor === Array; // true

var n = new Number(3)
n.constructor === Number; // true

Exemples

Afficher le constructeur d'un objet

L'exemple ci-dessous crée un prototype Arbre, et un objet de ce type, monArbre. Le script affiche ensuite la propriété constructor de l'objet monArbre :

function Arbre(nom) {
   this.nom = nom;
}

var monArbre = new Arbre("Sequoia");
console.log( "monArbre.constructor vaut " + monArbre.constructor );

Cet exemple produira le résultat suivant :

monArbre.constructor vaut function Arbre(nom) {
    this.nom = nom;
}

Modifier le constructeur d'un objet

Dans l'exemple suivant, on illustre comment modifier la valeur d'un constructeur pour les objets génériques. Dans l'exemple suivant, seules les valeurs true, 1 et "test" ne seront pas affectées car leurs constructeurs sont en lecture seule uniquement. Cet exemple montre qu'il ne faut pas se reposer de façon aveugle sur la propriété constructor d'un objet.

function Type () {}

var types = [
  new Array(),
  [],
  new Boolean(),
  true,             // restera tel quel
  new Date(),
  new Error(),
  new Function(),
  function () {},
  Math,
  new Number(),
  1,                // restera tel quel
  new Object(),
  {},
  new RegExp(),
  /(?:)/,
  new String(),
  'test'            // restera tel quel
];

for (var i = 0; i < types.length; i++) {
  types[i].constructor = Type;
  types[i] = [types[i].constructor, types[i] instanceof Type, types[i].toString()];
}

console.log(types.join('\n'));

L'exemple produira le résultat suivant :

function Type() {},false,
function Type() {},false,
function Type() {},false,false
function Boolean() {
    [native code]
},false,true
function Type() {},false,Mon Sep 01 2014 16:03:49 GMT+0600
function Type() {},false,Error
function Type() {},false,function anonymous() {

}
function Type() {},false,function () {}
function Type() {},false,[object Math]
function Type() {},false,0
function Number() {
    [native code]
},false,1
function Type() {},false,[object Object]
function Type() {},false,[object Object]
function Type() {},false,/(?:)/
function Type() {},false,/(?:)/
function Type() {},false,
function String() {
    [native code]
},false,test

Spécifications

Spécification Statut Commentaires
ECMAScript 1st Edition (ECMA-262) Standard Définition initiale. Implémentée avec JavaScript 1.1.
ECMAScript 5.1 (ECMA-262)
La définition de 'Object.prototype.constructor' dans cette spécification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Object.prototype.constructor' dans cette spécification.
Standard  
ECMAScript 2016 Draft (7th Edition, ECMA-262)
La définition de 'Object.prototype.constructor' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple (Oui) (Oui) (Oui) (Oui) (Oui)
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple (Oui) (Oui) (Oui) (Oui) (Oui) (Oui)

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, lastnico, teoli, junius_rendel
 Dernière mise à jour par : SphinxKnight,