blob: 9fc242fd8ff4cb121a4d238d1f3a126dff18dce6 (
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
|
---
title: Reflect.defineProperty()
slug: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty
tags:
- ECMAScript 2016
- JavaScript
- Method
- Reflect
translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty
---
<div>{{JSRef}}</div>
<p>静态方法 <code><strong>Reflect</strong></code><strong><code>.defineProperty()</code></strong> 基本等同于 {{jsxref("Object.defineProperty()")}} 方法,唯一不同是返回 {{jsxref("Boolean")}} 值。</p>
<h2 id="语法">语法</h2>
<pre class="syntaxbox">Reflect.defineProperty(target, propertyKey, attributes)
</pre>
<h3 id="参数">参数</h3>
<dl>
<dt><code>target</code></dt>
<dd>目标对象。</dd>
<dt><code>propertyKey</code></dt>
<dd>要定义或修改的属性的名称。</dd>
<dt><code>attributes</code></dt>
<dd>要定义或修改的属性的描述。</dd>
</dl>
<h3 id="返回值">返回值</h3>
<p> {{jsxref("Boolean")}} 值指示了属性是否被成功定义。</p>
<h3 id="异常">异常</h3>
<p>如果<code>target</code>不是 {{jsxref("Object")}},抛出一个 {{jsxref("TypeError")}}。</p>
<h2 id="描述">描述</h2>
<p><code>Reflect.defineProperty</code> 方法允许精确添加或修改对象上的属性。更多的细节请参阅类似的{{jsxref("Object.defineProperty")}} 。</p>
<div class="blockIndicator note">
<p><strong>区别:</strong><code>Object.defineProperty </code>返回一个对象,或者如果属性没有被成功定义,抛出一个 {{jsxref("TypeError")}} 。 相比之下,<code>Reflect.defineProperty</code>方法只返回一个 {{jsxref("Boolean")}} ,来说明该属性是否被成功定义。</p>
</div>
<h2 id="示例">示例</h2>
<h3 id="使用_Reflect.defineProperty">使用 <code>Reflect.defineProperty()</code></h3>
<pre>let obj = {}
Reflect.defineProperty(obj, 'x', {value: 7}) // true
obj.x // 7</pre>
<h3 id="检查属性是否被成功定义">检查属性是否被成功定义</h3>
<p>{{jsxref("Object.defineProperty")}} 方法,如果成功则返回一个对象,否则抛出一个 {{jsxref("TypeError")}} 。另外,当定义一个属性时,你也可以使用 <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch">try...catch</a></code> 去捕获其中任何的错误。而因为 <code>Reflect.defineProperty</code> 返回 Boolean 值作为成功的标识,所以只能使用 <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code> :</p>
<pre class="brush: js">if (Reflect.defineProperty(target, property, attributes)) {
// 成功
} else {
// 失败
}</pre>
<h2 id="规范">规范</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}</td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p>{{Compat("javascript.builtins.Reflect.defineProperty")}}</p>
<h2 id="相关链接">相关链接</h2>
<ul>
<li>{{jsxref("Reflect")}}</li>
<li>{{jsxref("Object.defineProperty()")}}</li>
</ul>
|