aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/global_objects/object/tosource/index.html
blob: 3213478bfa02f2a4696605de0abff4398a9355a2 (plain)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
---
title: Object.prototype.toSource()
slug: Web/JavaScript/Reference/Global_Objects/Object/toSource
tags:
  - JavaScript
  - Method
  - Non-standard
  - Object
  - Prototype
translation_of: Web/JavaScript/Reference/Global_Objects/Object/toSource
---
<div>{{JSRef("Global_Objects", "Object")}} {{non-standard_header}}</div>

<p>Метод <strong><code>toSource()</code></strong> возвращает строку, представляющую исходный код объекта.</p>

<h2 id="Syntax">Синтаксис</h2>

<pre class="syntaxbox"><code>Object.toSource();
<var>obj</var>.toSource();</code></pre>

<h3 id="Parameters">Параметры</h3>

<p>Нет.</p>

<h2 id="Description">Описание</h2>

<p>Метод <code>toSource()</code> возвращает следующие значения:</p>

<ul>
 <li>Для встроенного объекта {{jsxref("Global_Objects/Object", "Object")}}, метод <code>toSource()</code> возвращает следующую строку, указывающую, что исходный код не доступен:

  <pre class="brush: js">function Object() {
    [native code]
}
</pre>
 </li>
 <li>Для экземпляров {{jsxref("Global_Objects/Object", "Object")}}, метод <code>toSource()</code> возвращает строку, представляющую исходный код.</li>
</ul>

<p>Вы можете вызывать метод <code>toSource()</code> во время отладки для просмотра содержимого объекта.</p>

<h3 id="Overriding_the_toSource_method">Переопределение метода <code>toSource()</code></h3>

<p>Вы можете безопасно переопределять метод <code>toSource()</code> для объектов. Например:</p>

<pre class="brush: js">function Person(name) {
  this.name = name;
}

Person.prototype.toSource = function Person_toSource() {
  return 'new Person(' + uneval(this.name) + ')';
};

console.log(new Person('Joe').toSource()); // ---&gt; new Person("Joe")
</pre>

<h3 id="Built-in_toString_methods">Встроенные методы <code>toSource()</code></h3>

<p>Каждый тип ядра JavaScript имеет свой собственный метод <code>toSource()</code>. Вот эти объекты:</p>

<ul>
 <li>{{jsxref("Array.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Array", "Array")}}.</li>
 <li>{{jsxref("Boolean.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Boolean", "Boolean")}}.</li>
 <li>{{jsxref("Date.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Date", "Date")}}.</li>
 <li>{{jsxref("Function.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Function", "Function")}}.</li>
 <li>{{jsxref("Number.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Number", "Number")}}.</li>
 <li>{{jsxref("Regexp.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/RegExp", "RegExp")}}.</li>
 <li>{{jsxref("String.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/String", "String")}}.</li>
 <li>{{jsxref("Symbol.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Symbol", "Symbol")}}.</li>
 <li><code>Math.toSource()</code> — возвращает строку "Math".</li>
</ul>

<h3 id="Limitations_on_cyclical_objects">Ограничение на циклические объекты</h3>

<p>В том случае, если объекты содержат ссылки на самих себя, например циклический связанный список или дерево, которое можно обходить в обоих направлениях, метод <code>toSource()</code> не создаёт такие ссылки, начиная с Firefox 24. Например:</p>

<pre class="brush: js">var obj1 = {};
var obj2 = { a: obj1 };
obj1.b = obj2;

console.log('Циклическая ссылка: ' + (obj1.b.a == obj1));

var objSource = obj1.toSource(); // вернёт "({b:{a:{}}})"

obj1 = eval(objSource);

console.log('Циклическая ссылка: ' + (obj1.b.a == obj1));
</pre>

<p>Если же вам позарез нужно использовать метод <code>toSource()</code> для циклической структуры, объект должен предоставить переопределённый метод <code>toSource()</code>, либо с помощью ссылки на конструктор, либо предоставив анонимную функцию.</p>

<h2 id="Examples">Примеры</h2>

<h3 id="Example:_Using_toSource">Пример: использование метода <code>toSource()</code></h3>

<p>Следующий код определяет тип объекта <code>Dog</code> и создаёт объект <code>theDog</code> типа <code>Dog</code>:</p>

<pre class="brush: js">function Dog(name, breed, color, sex) {
  this.name = name;
  this.breed = breed;
  this.color = color;
  this.sex = sex;
}

theDog = new Dog('Болтушка', 'лабрадор', 'шоколадный', 'девочка');
</pre>

<p>Вызов метода <code>toSource()</code> на объекте <code>theDog</code> отобразит исходный код JavaScript, который определяет объект:</p>

<pre class="brush: js">theDog.toSource();
// вернёт ({name:"Болтушка", breed:"лабрадор", color:"шоколадный", sex:"девочка"})
</pre>

<h2 id="Specifications">Спецификации</h2>

<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>

<h2 id="Browser_compatibility">Совместимость с браузерами</h2>

<p> </p>

<p>{{Compat("javascript.builtins.Object.toSource")}}</p>

<p> </p>

<div> </div>

<div id="compat-mobile"> </div>

<h2 id="See_also">Смотрите также</h2>

<ul>
 <li>{{jsxref("Object.prototype.toString()")}}</li>
</ul>