1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
---
title: Object.prototype.constructor
slug: Web/JavaScript/Reference/Global_Objects/Object/constructor
tags:
- JavaScript
- Object
- Property
- Prototype
translation_of: Web/JavaScript/Reference/Global_Objects/Object/constructor
---
<div>
{{JSRef("Global_Objects", "Object")}}</div>
<h2 id="Summary">Сводка</h2>
<p>Возвращает ссылку на функцию {{jsxref("Global_Objects/Object", "Object")}}, создавшую прототип экземпляра. Обратите внимание, что значение этого свойства является ссылкой на саму функцию, а не строкой, содержащей имя функции. Для примитивных значений, вроде <code>1</code>, <code>true</code> или <code>"test"</code>, значение доступно только для чтения.</p>
<h2 id="Description">Описание</h2>
<p>Все объекты наследуют свойство <code>constructor</code> из своего прототипа:</p>
<pre class="brush: js">var o = {};
o.constructor === Object; // true
var a = [];
a.constructor === Array; // true
var n = new Number(3);
n.constructor === Number; // true
</pre>
<h2 id="Examples">Примеры</h2>
<h3 id="Example:_Displaying_the_constructor_of_an_object">Пример: отображение конструктора объекта</h3>
<p>В следующем примере создаётся прототип <code>Tree</code> и объект этого типа <code>theTree</code>. Затем в примере отображается свойство <code>constructor</code> объекта <code>theTree</code>.</p>
<pre class="brush: js">function Tree(name) {
this.name = name;
}
var theTree = new Tree("Красное дерево");
console.log("theTree.constructor равен " + theTree.constructor);
</pre>
<p>Вывод примера будет следующим:</p>
<pre class="brush: js">theTree.constructor равен function Tree(name) {
this.name = name;
}
</pre>
<h3 id="Example:_Changing_the_constructor_of_an_object">Пример: изменение конструктора объекта</h3>
<p>Следующий пример показывает, как изменить конструктор значений общих объектов. Не затрагиваются только значения <code>true</code>, <code>1</code> и <code>"тест"</code>, поскольку они имеют родные конструкторы только для чтения. Этот пример показывает, что полагаться на свойство <code>constructor</code> объекта не всегда безопасно.</p>
<pre class="brush: js">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'));
</pre>
<p>Вывод примера будет следующим:</p>
<pre class="brush: js">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,тест
</pre>
<h2 id="Specifications">Спецификации</h2>
{{Specifications}}
<h2 id="Browser_compatibility">Совместимость с браузерами</h2>
<div>
<p>{{Compat}}</p>
|