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
|
---
title: Object.prototype.toSource()
slug: Web/JavaScript/Reference/Global_Objects/Object/toSource
tags:
- JavaScript
- Method
- Object
- Prototype
translation_of: Web/JavaScript/Reference/Global_Objects/Object/toSource
---
<div>
<div>{{JSRef}} {{non-standard_header}}</div>
</div>
<p><strong><code>toSource()</code></strong>方法返回一个表示对象源代码的字符串。</p>
<h2 id="Syntax" name="Syntax">语法</h2>
<pre class="syntaxbox"><code><em>Object.toSource(); obj</em>.toSource()</code></pre>
<h3 id="Parameters" name="Parameters">返回值</h3>
<p>一个表示对象的源代码的字符串。</p>
<h2 id="Description" name="Description">描述</h2>
<p><code>toSource()</code>方法返回以下值:</p>
<ul>
<li>对于内置的{{jsxref("Object")}} 对象, <code>toSource</code>返回了下面的字符串,表示源码没法获取:</li>
</ul>
<pre class="brush: js">function Object() {
[native code]
}</pre>
<ul>
<li>对于{{jsxref("Object")}}的实例,<code>toSource()</code> 会返回该实例源代码的字符串表示。</li>
</ul>
<p>在调试时,你可以通过<code>toSource()</code>来查看一个对象的内容。</p>
<h3 id="重写toSource()方法">重写toSource()方法</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) + ")";
};
alert(new Person("Joe").toSource()); // ---> new Person("Joe")</pre>
<h3 id="Built-in_toString_methods" name="Built-in_toString_methods">内置<code>的toSource方法</code></h3>
<p>每个JavaScript核心类型都有它自己的<code>toSource()</code>方法.这些对象是:</p>
<ul>
<li>{{jsxref("Array.prototype.toSource()")}} {{non-standard_inline}} — {{jsxref("Array")}} object.</li>
<li>{{jsxref("Boolean.prototype.toSource()")}} {{non-standard_inline}} — {{jsxref("Boolean")}} object.</li>
<li>{{jsxref("Date.prototype.toSource()")}} {{non-standard_inline}} — {{jsxref("Date")}} object.</li>
<li>{{jsxref("Function.prototype.toSource()")}} {{non-standard_inline}} — {{jsxref("Function")}} object.</li>
<li>{{jsxref("Number.prototype.toSource()")}} {{non-standard_inline}} — {{jsxref("Number")}} object.</li>
<li>{{jsxref("RegExp.prototype.toSource()")}} {{non-standard_inline}} — {{jsxref("RegExp")}} object.</li>
<li>{{jsxref("SIMD.toSource()", "SIMD.%type%.prototype.toSource()")}} {{non-standard_inline}} — {{jsxref("SIMD")}} objects.</li>
<li>{{jsxref("String.prototype.toSource()")}} {{non-standard_inline}} — {{jsxref("String")}} object.</li>
<li>{{jsxref("Symbol.prototype.toSource()")}} {{non-standard_inline}} — {{jsxref("Symbol")}} object.</li>
<li><code>Math.toSource()</code> — Returns the String "Math".</li>
</ul>
<h3 id="循环引用限制">循环引用限制</h3>
<p><span id="noHighlight_0.3266603437527873">对于包含对自身的引用的对象 (例如, 循环链表或可以遍历两种方式的树), </span><code>toSource()</code><span>不会重新创建自引用, 如火狐24。例如:</span></p>
<pre class="brush: js">var obj1 = {};
var obj2 = { a: obj1 };
obj1.b = obj2;
console.log('Cyclical: ' + (obj1.b.a == obj1));
var objSource = obj1.toSource(); // returns "({b:{a:{}}})"
obj1 = eval(objSource);
console.log('Cyclical: ' + (obj1.b.a == obj1));</pre>
<p><span id="noHighlight_0.30716570898096807">如果使用循环结构, 并且需要 </span><code>toSource()</code><span>, 则对象必须提供对 </span><code>toSource()</code><span> 的重写, 无论是对构造函数的引用还是提供匿名函数。</span></p>
<h2 id="Examples" name="Examples">示例</h2>
<h3 id="Example:_Using_toSource" name="Example:_Using_toSource">使用<code>toSource()</code></h3>
<p>下面的代码定义了一个<code>Dog</code>对象类型还创建了一个<code>Dog</code>类型的对象实例<code>theDog</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("Gabby", "Lab", "chocolate", "girl");</pre>
<p>在<code>theDog</code>上调用<code>toSource</code>方法会显示出能定义该对象的源码:</p>
<pre class="brush: js">theDog.toSource();
// returns ({name:"Gabby", breed:"Lab", color:"chocolate", sex:"female"})</pre>
<h2 id="特性">特性</h2>
<p>不属于任何标准的一部分。在JavaScript1.3中实现。</p>
<h2 id="浏览器兼容">浏览器兼容</h2>
<p>{{Compat("javascript.builtins.Object.toSource")}}</p>
<h2 id="See_Also" name="See_Also">相关链接</h2>
<ul>
<li>{{jsxref("Object.prototype.toString()")}}</li>
</ul>
<p></p>
|