aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/global_objects/reflect/defineproperty/index.html
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>