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

Object.prototype.constructor

Сводка

Возвращает ссылку на функцию Object, создавшую прототип экземпляра. Обратите внимание, что значение этого свойства является ссылкой на саму функцию, а не строкой, содержащей имя функции. Для примитивных значений, вроде 1true или "test", значение доступно только для чтения.

Описание

Все объекты наследуют свойство constructor из своего прототипа:

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

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

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

Примеры

Пример: отображение конструктора объекта

В следующем примере создаётся прототип Tree и объект этого типа theTree. Затем в примере отображается свойство constructor объекта theTree.

function Tree(name) {
  this.name = name;
}

var theTree = new Tree("Красное дерево");
console.log("theTree.constructor равен " + theTree.constructor);

Вывод примера будет следующим:

theTree.constructor равен function Tree(name) {
  this.name = name;
}

Пример: изменение конструктора объекта

Следующий пример показывает, как изменить конструктор значений общих объектов. Не затрагиваются только значения true, 1 и "тест", поскольку они имеют родные конструкторы только для чтения. Этот пример показывает, что полагаться на свойство constructor объекта не всегда безопасно.

function Type() {}

var types = [
  new Array(),
  [],
  new Boolean(),
  true,             // останется неизменным
  new Date(),
  new Error(),
  new Function(),
  function() {},
  Math,
  new Number(),
  1,                // останется неизменным
  new Object(),
  {},
  new RegExp(),
  /(?:)/,
  new String(),
  'тест'            // останется неизменным
];

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

Вывод примера будет следующим:

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,тест

Спецификации

Спецификация Статус Комментарии
ECMAScript 1-е издание. Стандарт Изначальное определение. Реализовано в JavaScript 1.1.
ECMAScript 5.1 (ECMA-262)
Определение 'Object.prototype.constructor' в этой спецификации.
Стандарт  
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Object.prototype.constructor' в этой спецификации.
Стандарт  

Совместимость с браузерами

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) (Да) (Да) (Да) (Да)
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) (Да) (Да) (Да) (Да)

 

Метки документа и участники

 Внесли вклад в эту страницу: Natalya_Surikova, Mingun
 Обновлялась последний раз: Natalya_Surikova,