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".

Опис

Всі об'екти успадковують значення (властивість) конструктору від їхнього прототипу:

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

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

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

Приклади

Відображення конструктора об'єкта

Наступний приклад створює прототип, Tree, та об'єкт цього типу, theTree. Приклад далі демонструє який конструктор матиме об'єкт theTree.

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

var theTree = new Tree('Redwood');
console.log('theTree.constructor is ' + theTree.constructor);

Цей приклад в результаті покаже, що:

theTree.constructor is function Tree(name) {
  this.name = name;
}

Зміна конструктора об'єкту

Наступний приклад покаже як можна змінити конструктор вбудванних об'єктів . Тільки true, 1 та "test" не змінять свого конструктору, оскілки їхні конструктори доступні лише для читання. Цей приклад демонструє, що не завжди безпечно опиратися на властивість конструктору об'єкту.

function Type () {}

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

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,test

Specifications

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Найперше запровадження в JavaScript 1.1.
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.prototype.constructor' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.prototype.constructor' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Object.prototype.constructor' in that specification.
Draft  

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

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

 Зробили внесок у цю сторінку: pushnov-i
 Востаннє оновлена: pushnov-i,