aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/global_objects/reflect
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/reflect')
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/apply/index.html101
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/construct/index.html189
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/defineproperty/index.html87
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/deleteproperty/index.html134
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/get/index.html90
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html139
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/getprototypeof/index.html84
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/has/index.html133
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/index.html106
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/isextensible/index.html147
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/ownkeys/index.html91
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/preventextensions/index.html93
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/set/index.html98
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/setprototypeof/index.html78
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/reflect/比较_reflect_和_object_方法/index.html134
15 files changed, 1704 insertions, 0 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/apply/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/apply/index.html
new file mode 100644
index 0000000000..d3cb19ec78
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/apply/index.html
@@ -0,0 +1,101 @@
+---
+title: Reflect.apply()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/apply
+tags:
+ - JavaScript
+ - Method
+ - Reference
+ - Reflect
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/apply
+---
+<div>{{JSRef}}</div>
+
+<p>静态方法 <code><strong>Reflect</strong></code><strong><code>.apply()</code></strong> 通过指定的参数列表发起对目标(target)函数的调用。</p>
+
+<div>{{EmbedInteractiveExample("pages/js/reflect-apply.html")}}</div>
+
+
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.apply(target, thisArgument, argumentsList)
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt>target</dt>
+ <dd>目标函数。</dd>
+ <dt>thisArgument</dt>
+ <dd>target函数调用时绑定的this对象。</dd>
+ <dt>argumentsList</dt>
+ <dd>target函数调用时传入的实参列表,该参数应该是一个类数组的对象。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>返回值是调用完带着指定参数和 <code>this</code> 值的给定的函数后返回的结果。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>如果 <code>target</code> 对象不可调用,抛出 {{jsxref("TypeError")}}。</p>
+
+<h2 id="描述">描述</h2>
+
+<p>该方法与ES5中{{jsxref("Function.prototype.apply()")}}方法类似:调用一个方法并且显式地指定 <code>this</code> 变量和参数列表(arguments) ,参数列表可以是数组,或类似数组的对象。</p>
+
+<pre class="brush: js">Function.prototype.apply.call(Math.floor, undefined, [1.75]);</pre>
+
+<p>使用 <code>Reflect.apply</code> 方法会使代码更加简洁易懂。</p>
+
+<h2 id="使用示例">使用示例</h2>
+
+<h3 id="Reflect.apply"><code>Reflect.apply()</code></h3>
+
+<pre class="brush: js">Reflect.apply(Math.floor, undefined, [1.75]);
+// 1;
+
+Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111]);
+// "hello"
+
+Reflect.apply(RegExp.prototype.exec, /ab/, ["confabulation"]).index;
+// 4
+
+Reflect.apply("".charAt, "ponies", [3]);
+// "i"
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.apply', 'Reflect.apply')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>首次定义.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.apply', 'Reflect.apply')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Reflect.apply")}}</p>
+
+<h2 id="相关连接">相关连接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Function.prototype.apply()")}}</li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/construct/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/construct/index.html
new file mode 100644
index 0000000000..8c6c4e2126
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/construct/index.html
@@ -0,0 +1,189 @@
+---
+title: Reflect.construct()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/construct
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Reflect</strong></code><strong><code>.construct()</code></strong> 方法的行为有点像 <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> 操作符</a> 构造函数 , 相当于运行 <code>new target(...args)</code>.</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox notranslate">Reflect.construct(target, argumentsList[, newTarget])
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>被运行的目标构造函数</dd>
+ <dt><code>argumentsList</code></dt>
+ <dd>类数组,目标构造函数调用时的参数。</dd>
+ <dt><code>newTarget</code> {{optional_inline}}</dt>
+ <dd>作为新创建对象的原型对象的<code>constructor</code>属性, 参考 <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new.target">new.target</a></code> 操作符,默认值为<code>target。</code></dd>
+</dl>
+
+<h3 id="返回值"><code>返回值</code></h3>
+
+<p>以<code>target</code>(如果<code>newTarget</code>存在,则为<code>newTarget</code>)函数为构造函数,<code>argumentList</code>为其初始化参数的对象实例。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>如果target或者newTarget不是构造函数,抛出{{jsxref("TypeError")}},异常。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.construct</code>允许你使用可变的参数来调用构造函数 ,这和使用<a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/new">new操作符</a>搭配<a href="https://developer.mozilla.org/ zh-CN/docs/Web/JavaScript/Reference/Operators/new">对象展开符</a>调用一样。</p>
+
+<pre class="brush: js notranslate">var obj = new Foo(...args);
+var obj = Reflect.construct(Foo, args); </pre>
+
+<h3 id="Reflect.construct_vs_Object.create"><code>Reflect.construct()</code> vs <code>Object.create()</code></h3>
+
+<p><code><font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">在新语法</span></font>Reflect</code>出现之前,是通过明确指定构造函数和原型对象( 使用{{jsxref("Object.create()")}})来创建一个对象的。</p>
+
+<pre class="brush: js notranslate">function OneClass() {
+ this.name = 'one';
+}
+
+function OtherClass() {
+ this.name = 'other';
+}
+
+// 创建一个对象:
+var obj1 = Reflect.construct(OneClass, args, OtherClass);
+
+// 与上述方法等效:
+var obj2 = Object.create(OtherClass.prototype);
+OneClass.apply(obj2, args);
+
+console.log(obj1.name); // 'one'
+console.log(obj2.name); // 'one'
+
+console.log(obj1 instanceof OneClass); // false
+console.log(obj2 instanceof OneClass); // false
+
+console.log(obj1 instanceof OtherClass); // true
+console.log(obj2 instanceof OtherClass); // true</pre>
+
+<p>虽然两种方式结果相同,但在创建对象过程中仍一点不同。 </p>
+
+<p><font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">当使用</span></font><code>Object.create()</code>和{{jsxref("Function.prototype.apply()")}}时,如果不使用<code>new</code>操作符调用构造函数,构造函数内部的<code>new.target</code>值会指向<code>undefined</code>。</p>
+
+<p>当调用<code>Reflect.construct()</code>来创建对象,<code>new.target</code>值会自动指定到<code>target</code>(或者newTarget,前提是newTarget指定了)。</p>
+
+<pre class="brush: js notranslate">function OneClass() {
+ console.log('OneClass');
+ console.log(new.target);
+}
+function OtherClass() {
+ console.log('OtherClass');
+ console.log(new.target);
+}
+
+var obj1 = Reflect.construct(OneClass, args);
+// 输出:
+// OneClass
+// function OneClass { ... }
+
+var obj2 = Reflect.construct(OneClass, args, OtherClass);
+// 输出:
+// OneClass
+// function OtherClass { ... }
+
+var obj3 = Object.create(OtherClass.prototype);
+OneClass.apply(obj3, args);
+// 输出:
+// OneClass
+// undefined</pre>
+
+<h2 id="举例"><font face="x-locale-heading-primary, zillaslab, Palatino, Palatino Linotype, x-locale-heading-secondary, serif"><span style="font-size: 37.33327865600586px;"><strong>举例</strong></span></font></h2>
+
+<h3 id="使用_Reflect.construct">使用 <code>Reflect.construct()</code></h3>
+
+<pre class="brush: js notranslate">var d = Reflect.construct(Date, [1776, 6, 4]);
+d instanceof Date; // true
+d.getFullYear(); // 1776
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.construct', 'Reflect.construct')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.construct', 'Reflect.construct')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容">浏览器兼容</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>49</td>
+ <td>{{CompatGeckoDesktop(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code></a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new.target">new.target</a></code></li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/defineproperty/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/defineproperty/index.html
new file mode 100644
index 0000000000..14882c24b9
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/defineproperty/index.html
@@ -0,0 +1,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 notranslate">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 class="notranslate">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 notranslate">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>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/deleteproperty/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/deleteproperty/index.html
new file mode 100644
index 0000000000..3be36d7965
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/deleteproperty/index.html
@@ -0,0 +1,134 @@
+---
+title: Reflect.deleteProperty()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty
+---
+<div>{{JSRef}}</div>
+
+<p>静态方法 <code><strong>Reflect</strong></code><strong><code>.deleteProperty()</code></strong> 允许用于删除属性。它很像 <a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete"><code>delete</code> operator</a> ,但它是一个函数。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.deleteProperty(target, propertyKey)
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>删除属性的目标对象。</dd>
+ <dt><code>propertyKey</code></dt>
+ <dd>需要删除的属性的名称。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>{{jsxref("Boolean")}} 值表明该属性是否被成功删除。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>抛出一个 {{jsxref("TypeError")}},如果<code>target</code>不是 {{jsxref("Object")}}。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.deleteProperty</code> 允许你删除一个对象上的属性。返回一个 {{jsxref("Boolean")}} 值表示该属性是否被成功删除。它几乎与非严格的 <a href="/zh-CN/docs/Web/JavaScript/Reference/Operators/delete"><code>delete</code> operator</a> 相同。</p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="使用_Reflect.deleteProperty()">使用 <code>Reflect.deleteProperty()</code></h3>
+
+<pre class="brush: js">var obj = { x: 1, y: 2 };
+Reflect.deleteProperty(obj, "x"); // true
+obj; // { y: 2 }
+
+var arr = [1, 2, 3, 4, 5];
+Reflect.deleteProperty(arr, "3"); // true
+arr; // [1, 2, 3, , 5]
+
+// 如果属性不存在,返回 true
+Reflect.deleteProperty({}, "foo"); // true
+
+// 如果属性不可配置,返回 false
+Reflect.deleteProperty(Object.freeze({foo: 1}), "foo"); // false
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.deleteproperty', 'Reflect.deleteProperty')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.deleteproperty', 'Reflect.deleteProperty')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>49</td>
+ <td>{{CompatGeckoDesktop(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>10</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>49</td>
+ <td>{{CompatGeckoMobile(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>10</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete"><code>delete</code> operator</a></li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/get/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/get/index.html
new file mode 100644
index 0000000000..340178d61f
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/get/index.html
@@ -0,0 +1,90 @@
+---
+title: Reflect.get()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/get
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/get
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Reflect</strong></code><strong><code>.get()</code></strong>方法与从 对象 (<code>target[propertyKey]</code>) 中读取属性类似,但它是通过一个函数执行来操作的。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.get(target, propertyKey[, receiver])
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>需要取值的目标对象</dd>
+ <dt><code>propertyKey</code></dt>
+ <dd>需要获取的值的键值</dd>
+ <dt>receiver</dt>
+ <dd>如果<code>target</code>对象中指定了<code>getter</code>,<code>receiver</code>则为<code>getter</code>调用时的<code>this</code>值。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>属性的值。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>如果目标值类型不是 {{jsxref("Object")}},则抛出一个 {{jsxref("TypeError")}}。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.get</code>方法允许你从一个对象中取属性值。就如同<a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">属性访问器</a> 语法,但却是通过函数调用来实现。</p>
+
+<h2 id="实例">实例</h2>
+
+<h3 id="使用_Reflect.get"><code><font face="Open Sans, Arial, sans-serif">使用 </font>Reflect.get()</code></h3>
+
+<pre class="brush: js">// Object
+var obj = { x: 1, y: 2 };
+Reflect.get(obj, "x"); // 1
+
+// Array
+Reflect.get(["zero", "one"], 1); // "one"
+
+// Proxy with a get handler
+var x = {p: 1};
+var obj = new Proxy(x, {
+ get(t, k, r) { return k + "bar"; }
+});
+Reflect.get(obj, "foo"); // "foobar"
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.get', 'Reflect.get')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.get', 'Reflect.get')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{Compat("javascript.builtins.Reflect.get")}}</p>
+
+<div id="compat-desktop"></div>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">Property accessors</a></li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html
new file mode 100644
index 0000000000..e999254e32
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html
@@ -0,0 +1,139 @@
+---
+title: Reflect.getOwnPropertyDescriptor()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor
+---
+<div>{{JSRef}}</div>
+
+<p>静态方法 <code><strong>Reflect</strong></code><strong><code>.getOwnPropertyDescriptor()</code></strong> 与 {{jsxref("Object.getOwnPropertyDescriptor()")}} 方法相似。如果在对象中存在,则返回给定的属性的属性描述符。否则返回 {{jsxref("undefined")}}。 </p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.getOwnPropertyDescriptor(target, propertyKey)
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>需要寻找属性的目标对象。</dd>
+ <dt><code>propertyKey</code></dt>
+ <dd>获取自己的属性描述符的属性的名称。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>如果属性存在于给定的目标对象中,则返回属性描述符;否则,返回 {{jsxref("undefined")}}。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>抛出一个 {{jsxref("TypeError")}},如果目标不是 {{jsxref("Object")}}。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.getOwnPropertyDescriptor</code>方法返回一个属性描述符,如果给定的属性存在于对象中,否则返回 {{jsxref("undefined")}} 。 与  {{jsxref("Object.getOwnPropertyDescriptor()")}} 的唯一不同在于如何处理非对象目标。</p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="使用_Reflect.getOwnPropertyDescriptor()">使用 <code>Reflect.getOwnPropertyDescriptor()</code></h3>
+
+<pre class="brush: js">Reflect.getOwnPropertyDescriptor({x: "hello"}, "x");
+// {value: "hello", writable: true, enumerable: true, configurable: true}
+
+Reflect.getOwnPropertyDescriptor({x: "hello"}, "y");
+// undefined
+
+Reflect.getOwnPropertyDescriptor([], "length");
+// {value: 0, writable: true, enumerable: false, configurable: false}
+</pre>
+
+<h3 id="与_Object.getOwnPropertyDescriptor()_的不同点">与 <code>Object.getOwnPropertyDescriptor() 的不同点</code></h3>
+
+<p>如果该方法的第一个参数不是一个对象(一个原始值),那么将造成 {{jsxref("TypeError")}} 错误。而对于 {{jsxref("Object.getOwnPropertyDescriptor")}},非对象的第一个参数将被强制转换为一个对象处理。</p>
+
+<pre class="brush: js">Reflect.getOwnPropertyDescriptor("foo", 0);
+// TypeError: "foo" is not non-null object
+
+Object.getOwnPropertyDescriptor("foo", 0);
+// { value: "f", writable: false, enumerable: true, configurable: false }</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.getownpropertydescriptor', 'Reflect.getOwnPropertyDescriptor')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.getownpropertydescriptor', 'Reflect.getOwnPropertyDescriptor')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>49</td>
+ <td>{{CompatGeckoDesktop(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>10</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>49</td>
+ <td>{{CompatGeckoMobile(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>10</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Object.getOwnPropertyDescriptor()")}}</li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/getprototypeof/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/getprototypeof/index.html
new file mode 100644
index 0000000000..8189b3fb0f
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/getprototypeof/index.html
@@ -0,0 +1,84 @@
+---
+title: Reflect.getPrototypeOf()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf
+---
+<div>{{JSRef}}</div>
+
+<p>静态方法 <code><strong>Reflect</strong></code><strong><code>.getPrototypeOf()</code></strong> 与 {{jsxref("Object.getPrototypeOf()")}} 方法几乎是一样的。都是返回指定对象的原型(即内部的 <code>[[Prototype]]</code> 属性的值)。</p>
+
+<p>{{EmbedInteractiveExample("pages/js/reflect-getprototypeof.html")}}</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.getPrototypeOf(target)
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>获取原型的目标对象。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>给定对象的原型。如果给定对象没有继承的属性,则返回 {{jsxref("null")}}。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>如果 <code><var>target</var></code> 不是 {{jsxref("Object")}},抛出一个 {{jsxref("TypeError")}} 异常。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.getPrototypeOf</code> 返回指定对象的原型 (即内部的 <code>[[Prototype]]</code> 属性的值) 。</p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="使用_Reflect.getPrototypeOf">使用 <code>Reflect.getPrototypeOf()</code></h3>
+
+<pre class="brush: js">Reflect.getPrototypeOf({}); // Object.prototype
+Reflect.getPrototypeOf(Object.prototype); // null
+Reflect.getPrototypeOf(Object.create(null)); // null
+</pre>
+
+<h3 id="与_Object.getPrototypeOf_比较">与 <code>Object.getPrototypeOf()</code> 比较</h3>
+
+<pre>// 如果参数为 Object,返回结果相同
+Object.getPrototypeOf({}) // Object.prototype
+Reflect.getPrototypeOf({}) // Object.prototype
+
+// 在 ES5 规范下,对于非 Object,抛异常
+Object.getPrototypeOf('foo') // Throws TypeError
+Reflect.getPrototypeOf('foo') // Throws TypeError
+
+// 在 ES2015 规范下,Reflect 抛异常, Object 强制转换非 Object
+Object.getPrototypeOf('foo') // String.prototype
+Reflect.getPrototypeOf('foo') // Throws TypeError
+
+// 如果想要模拟 Object 在 ES2015 规范下的表现,需要强制类型转换
+Reflect.getPrototypeOf(Object('foo')) // String.prototype</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.getprototypeof', 'Reflect.getPrototypeOf')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{Compat("javascript.builtins.Reflect.getPrototypeOf")}}</p>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Object.getPrototypeOf()")}}</li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/has/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/has/index.html
new file mode 100644
index 0000000000..aaf55532e3
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/has/index.html
@@ -0,0 +1,133 @@
+---
+title: Reflect.has()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/has
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/has
+---
+<div>{{JSRef}}</div>
+
+<p>静态方法 <code><strong>Reflect</strong></code><strong><code>.has()</code></strong> 作用与 <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 操作符</a> 相同。</p>
+
+<h2 id="句法">句法</h2>
+
+<pre class="syntaxbox">Reflect.has(target, propertyKey)
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>目标对象.</dd>
+ <dt><code>propertyKey</code></dt>
+ <dd>属性名,需要检查目标对象是否存在此属性。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>一个 {{jsxref("Boolean")}} 类型的对象指示是否存在此属性。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>如果目标对象并非{{jsxref("Object")}} 类型,抛出{{jsxref("TypeError")}}。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.has</code> 用于检查一个对象是否拥有某个属性, 相当于<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 操作符</a> 。</p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="使用_Reflect.has()">使用 <code>Reflect.has()</code></h3>
+
+<pre class="brush: js">Reflect.has({x: 0}, "x"); // true
+Reflect.has({x: 0}, "y"); // false
+
+// 如果该属性存在于原型链中,返回true
+Reflect.has({x: 0}, "toString");
+
+// Proxy 对象的 .has() 句柄方法
+obj = new Proxy({}, {
+ has(t, k) { return k.startsWith("door"); }
+});
+Reflect.has(obj, "doorbell"); // true
+Reflect.has(obj, "dormitory"); // false
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.has', 'Reflect.has')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.has', 'Reflect.has')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>49</td>
+ <td>{{CompatGeckoDesktop(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="相关连接">相关连接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> operator</a></li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/index.html
new file mode 100644
index 0000000000..c9cb4a36cf
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/index.html
@@ -0,0 +1,106 @@
+---
+title: Reflect
+slug: Web/JavaScript/Reference/Global_Objects/Reflect
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Overview
+ - Reflect
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect
+---
+<div>{{JSRef}}</div>
+
+<p><strong>Reflect</strong> 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与<a href="https://wiki.developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler">proxy handlers</a>的方法相同。<code>Reflect</code>不是一个函数对象,因此它是不可构造的。</p>
+
+<h2 id="描述">描述</h2>
+
+<p>与大多数全局对象不同<code>Reflect</code>并非一个构造函数,所以不能通过<a href="/zh-CN/docs/Web/JavaScript/Reference/Operators/new">new运算符</a>对其进行调用,或者将<code>Reflect</code>对象作为一个函数来调用。<code>Reflect</code>的所有属性和方法都是静态的(就像{{jsxref("Math")}}对象)。</p>
+
+<p><code>Reflect</code> 对象提供了以下静态方法,这些方法与<a href="https://wiki.developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler">proxy handler methods</a>的命名相同.</p>
+
+<p>其中的一些方法与 {{jsxref("Object")}}相同, 尽管二者之间存在 <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods">某些细微上的差别</a> .</p>
+
+<h2 id="静态方法">静态方法</h2>
+
+<dl>
+ <dt>{{jsxref("Reflect.apply()", "Reflect.apply(<var>target</var>, <var>thisArgument</var>, <var>argumentsList</var>)")}}</dt>
+ <dd>对一个函数进行调用操作,同时可以传入一个数组作为调用参数。和 {{jsxref("Function.prototype.apply()")}} 功能类似。</dd>
+ <dt>{{jsxref("Reflect.construct()", "Reflect.construct(<var>target</var>, <var>argumentsList</var>[, <var>newTarget</var>])")}}</dt>
+ <dd>对构造函数进行 <a href="/zh-CN/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> </a> 操作,相当于执行 <code>new target(...args)</code>。</dd>
+ <dt>{{jsxref("Reflect.defineProperty()", "Reflect.defineProperty(<var>target</var>, <var>propertyKey</var>, <var>attributes</var>)")}}</dt>
+ <dd>和 {{jsxref("Object.defineProperty()")}} 类似。如果设置成功就会返回 <code>true</code></dd>
+ <dt>{{jsxref("Reflect.deleteProperty()", "Reflect.deleteProperty(<var>target</var>, <var>propertyKey</var>)")}}</dt>
+ <dd>作为函数的<a href="/zh-CN/docs/Web/JavaScript/Reference/Operators/delete"><code>delete</code></a>操作符,相当于执行 <code>delete target[name]</code>。</dd>
+ <dt>{{jsxref("Reflect.get()", "Reflect.get(<var>target</var>, <var>propertyKey</var>[, <var>receiver</var>])")}}</dt>
+ <dd>获取对象身上某个属性的值,类似于 <code>target[name]。</code></dd>
+ <dt>{{jsxref("Reflect.getOwnPropertyDescriptor()", "Reflect.getOwnPropertyDescriptor(<var>target</var>, <var>propertyKey</var>)")}}</dt>
+ <dd>类似于 {{jsxref("Object.getOwnPropertyDescriptor()")}}。如果对象中存在该属性,则返回对应的属性描述符,  否则返回 {{jsxref("undefined")}}.</dd>
+ <dt>{{jsxref("Reflect.getPrototypeOf()", "Reflect.getPrototypeOf(<var>target</var>)")}}</dt>
+ <dd>类似于 {{jsxref("Object.getPrototypeOf()")}}。</dd>
+ <dt>{{jsxref("Reflect.has()", "Reflect.has(<var>target, propertyKey</var>)")}}</dt>
+ <dd>判断一个对象是否存在某个属性,和 <a href="/zh-CN/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 运算符</a> 的功能完全相同。</dd>
+ <dt>{{jsxref("Reflect.isExtensible()", "Reflect.isExtensible(<var>target</var>)")}}</dt>
+ <dd>类似于 {{jsxref("Object.isExtensible()")}}.</dd>
+ <dt>{{jsxref("Reflect.ownKeys()", "Reflect.ownKeys(<var>target</var>)")}}</dt>
+ <dd>返回一个包含所有自身属性(不包含继承属性)的数组。(类似于 {{jsxref("Object.keys()")}}, 但不会受<code>enumerable影响</code>).</dd>
+ <dt>{{jsxref("Reflect.preventExtensions()", "Reflect.preventExtensions(<var>target</var>)")}}</dt>
+ <dd>类似于 {{jsxref("Object.preventExtensions()")}}。返回一个{{jsxref("Boolean")}}。</dd>
+ <dt>{{jsxref("Reflect.set()", "Reflect.set(<var>target</var>, <var>propertyKey</var>, <var>value</var>[, <var>receiver</var>])")}}</dt>
+ <dd>将值分配给属性的函数。返回一个{{jsxref("Boolean")}},如果更新成功,则返回<code>true</code>。</dd>
+ <dt>{{jsxref("Reflect.setPrototypeOf()", "Reflect.setPrototypeOf(<var>target</var>, <var>prototype</var>)")}}</dt>
+ <dd>设置对象原型的函数. 返回一个 {{jsxref("Boolean")}}, 如果更新成功,则返回<code>true。</code></dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="检测一个对象是否存在特定属性">检测一个对象是否存在特定属性</h3>
+
+<pre class="notranslate">const duck = {
+ name: 'Maurice',
+ color: 'white',
+ greeting: function() {
+ console.log(`Quaaaack! My name is ${this.name}`);
+ }
+}
+
+Reflect.has(duck, 'color');
+// true
+Reflect.has(duck, 'haircut');
+// false</pre>
+
+<h3 id="返回这个对象自身的属性">返回这个对象自身的属性</h3>
+
+<pre class="notranslate">Reflect.ownKeys(duck);
+// [ "name", "color", "greeting" ]</pre>
+
+<h3 id="为这个对象添加一个新的属性">为这个对象添加一个新的属性</h3>
+
+<pre class="notranslate">Reflect.set(duck, 'eyes', 'black');
+// returns "true" if successful
+// "duck" now contains the property "eyes: 'black'"</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect-object', 'Reflect')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容">浏览器兼容</h2>
+
+<div class="hidden">The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</div>
+
+<p>{{Compat("javascript.builtins.Reflect")}}</p>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Proxy")}} 全局对象。</li>
+ <li>{{jsxref("Proxy.handler", "处理器")}} 对象。</li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/isextensible/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/isextensible/index.html
new file mode 100644
index 0000000000..a04fbd5fb0
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/isextensible/index.html
@@ -0,0 +1,147 @@
+---
+title: Reflect.isExtensible()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible
+---
+<div>{{JSRef}}</div>
+
+<p><code><font face="Open Sans, Arial, sans-serif">静态方法 </font><strong>Reflect</strong></code><strong><code>.isExtensible()</code></strong> 判断一个对象是否可扩展 (即是否能够添加新的属性)。与它 {{jsxref("Object.isExtensible()")}} 方法相似,但有一些不同,详情可见 {{anch("Difference to Object.isExtensible()", "differences")}}。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.isExtensible(target)
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>检查是否可扩展的目标对象。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>返回一个 {{jsxref("Boolean")}} 值表明该对象是否可扩展。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>抛出一个 {{jsxref("TypeError")}},如果对象不是 {{jsxref("Object")}}。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.isExtensible 判断</code>一个对象是否可扩展 (即是否能够添加新的属性)。它与 {{jsxref("Object.isExtensible()")}} 方法一样。</p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="使用_Reflect.isExtensible()">使用 <code>Reflect.isExtensible()</code></h3>
+
+<p>详情可见 {{jsxref("Object.isExtensible()")}}。</p>
+
+<pre class="brush: js">// New objects are extensible.
+var empty = {};
+Reflect.isExtensible(empty); // === true
+
+// ...but that can be changed.
+Reflect.preventExtensions(empty);
+Reflect.isExtensible(empty); // === false
+
+// Sealed objects are by definition non-extensible.
+var sealed = Object.seal({});
+Reflect.isExtensible(sealed); // === false
+
+// Frozen objects are also by definition non-extensible.
+var frozen = Object.freeze({});
+Reflect.isExtensible(frozen); // === false
+</pre>
+
+<h3 id="与_Object.isExtensible()_的不同点">与 <code>Object.isExtensible() 的不同点</code></h3>
+
+<p>如果该方法的第一个参数不是一个对象(原始值),那么将造成一个 {{jsxref("TypeError")}} 异常。对于 {{jsxref("Object.isExtensible()")}},非对象的第一个参数会被强制转换为一个对象。</p>
+
+<pre class="brush: js">Reflect.isExtensible(1);
+// TypeError: 1 is not an object
+
+Object.isExtensible(1);
+// false
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.isextensible', 'Reflect.isExtensible')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.isextensible', 'Reflect.isExtensible')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>49</td>
+ <td>{{CompatGeckoDesktop(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>10</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>49</td>
+ <td>{{CompatGeckoMobile(42)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>10</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Object.isExtensible()")}}</li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/ownkeys/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/ownkeys/index.html
new file mode 100644
index 0000000000..bfa393f2ff
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/ownkeys/index.html
@@ -0,0 +1,91 @@
+---
+title: Reflect.ownKeys()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys
+tags:
+ - Reflect
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys
+---
+<div>{{JSRef}}</div>
+
+<p>静态方法 <code><strong>Reflect</strong></code><strong><code>.ownKeys()</code></strong> 返回一个由目标对象自身的属性键组成的数组。</p>
+
+<div>{{EmbedInteractiveExample("pages/js/reflect-ownkeys.html")}}</div>
+
+
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.ownKeys(target)
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>获取自身属性键的目标对象。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>由目标对象的自身属性键组成的 {{jsxref("Array")}}。 </p>
+
+<h3 id="异常">异常</h3>
+
+<p>如果目标不是 {{jsxref("Object")}},抛出一个 {{jsxref("TypeError")}}。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.ownKeys</code> 方法返回一个由目标对象自身的属性键组成的数组。它的返回值等同于<code>{{jsxref("Object.getOwnPropertyNames")}}(target).concat({{jsxref("Object.getOwnPropertySymbols")}}(target))。</code></p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="使用_Reflect.ownKeys()">使用 <code>Reflect.ownKeys()</code></h3>
+
+<pre class="brush: js">Reflect.ownKeys({z: 3, y: 2, x: 1}); // [ "z", "y", "x" ]
+Reflect.ownKeys([]); // ["length"]
+
+var sym = Symbol.for("comet");
+var sym2 = Symbol.for("meteor");
+var obj = {[sym]: 0, "str": 0, "773": 0, "0": 0,
+ [sym2]: 0, "-1": 0, "8": 0, "second str": 0};
+Reflect.ownKeys(obj);
+// [ "0", "8", "773", "str", "-1", "second str", Symbol(comet), Symbol(meteor) ]
+// Indexes in numeric order,
+// strings in insertion order,
+// symbols in insertion order
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容">浏览器兼容</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Reflect.ownKeys")}}</p>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/preventextensions/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/preventextensions/index.html
new file mode 100644
index 0000000000..7d24c17fe6
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/preventextensions/index.html
@@ -0,0 +1,93 @@
+---
+title: Reflect.preventExtensions()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions
+---
+<div>{{JSRef}}</div>
+
+<p>静态方法 <code><strong>Reflect</strong></code><strong><code>.preventExtensions()</code></strong> 方法阻止新属性添加到对象 (例如:防止将来对对象的扩展被添加到对象中)。该方法与 {{jsxref("Object.preventExtensions()")}}相似,但有一些不同点。详情可见 {{anch("与_Object.preventExtensions_的不同点", "differences")}}。</p>
+
+<p>{{EmbedInteractiveExample("pages/js/reflect-preventextensions.html")}}</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.preventExtensions(target)
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>阻止扩展的目标对象。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>返回一个 {{jsxref("Boolean")}} 值表明目标对象是否成功被设置为不可扩展。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>抛出一个 {{jsxref("TypeError")}} 错误,如果 <code>target</code> 不是 {{jsxref("Object")}}。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.preventExtensions</code> 方法阻止新属性添加到对象 (例如:防止将来对对象的扩展被添加到对象中)。该方法与  {{jsxref("Object.preventExtensions()")}} 方法相似。</p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="使用_Reflect.preventExtensions">使用 <code>Reflect.preventExtensions()</code></h3>
+
+<p>详情可见 {{jsxref("Object.preventExtensions()")}}.</p>
+
+<pre class="brush: js">// Objects are extensible by default.
+var empty = {};
+Reflect.isExtensible(empty); // === true
+
+// ...but that can be changed.
+Reflect.preventExtensions(empty);
+Reflect.isExtensible(empty); // === false
+</pre>
+
+<h3 id="与_Object.preventExtensions_的不同点">与 <code>Object.preventExtensions()</code> 的不同点</h3>
+
+<p>如果该方法的 <em><code>target</code></em> 参数不是一个对象(是原始值),那么将造成一个 {{jsxref("TypeError")}} 异常。 对于{{jsxref("Object.preventExtensions()")}} 方法, 非对象的 <em><code>target</code></em> 参数将被强制转换为对象。</p>
+
+<pre class="brush: js">Reflect.preventExtensions(1);
+// TypeError: 1 is not an object
+
+Object.preventExtensions(1);
+// 1
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.preventextensions', 'Reflect.preventExtensions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.preventextensions', 'Reflect.preventExtensions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{Compat("javascript.builtins.Reflect.preventExtensions")}}</p>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Object.isExtensible()")}}</li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/set/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/set/index.html
new file mode 100644
index 0000000000..9cb7bbe280
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/set/index.html
@@ -0,0 +1,98 @@
+---
+title: Reflect.set()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/set
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/set
+---
+<div>{{JSRef}}</div>
+
+<p>静态方法 <code><strong>Reflect</strong></code><strong><code>.set()</code></strong> 工作方式就像在一个对象上设置一个属性。</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.set(target, propertyKey, value[, receiver])
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>设置属性的目标对象。</dd>
+ <dt><code>propertyKey</code></dt>
+ <dd>设置的属性的名称。</dd>
+ <dt><code>value</code></dt>
+ <dd>设置的值。</dd>
+ <dt><code>receiver</code></dt>
+ <dd>如果遇到 <code>setter</code>,<code>receiver</code>则为<code>setter</code>调用时的<code>this</code>值。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>返回一个 {{jsxref("Boolean")}} 值表明是否成功设置属性。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>抛出一个 {{jsxref("TypeError")}},如果目标不是 {{jsxref("Object")}}。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.set</code> 方法允许你在对象上设置属性。它的作用是给属性赋值并且就像 <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">property accessor</a> 语法一样,但是它是以函数的方式。 </p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="使用_Reflect.set">使用 <code>Reflect.set()</code></h3>
+
+<pre class="brush: js">// Object
+var obj = {};
+Reflect.set(obj, "prop", "value"); // true
+obj.prop; // "value"
+
+// Array
+var arr = ["duck", "duck", "duck"];
+Reflect.set(arr, 2, "goose"); // true
+arr[2]; // "goose"
+
+// It can truncate an array.
+Reflect.set(arr, "length", 1); // true
+arr; // ["duck"];
+
+// With just one argument, propertyKey and value are "undefined".
+var obj = {};
+Reflect.set(obj); // true
+Reflect.getOwnPropertyDescriptor(obj, "undefined");
+// { value: undefined, writable: true, enumerable: true, configurable: true }
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect.set', 'Reflect.set')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.set', 'Reflect.set')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Reflect.set")}}</p>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">Property accessors</a></li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/setprototypeof/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/setprototypeof/index.html
new file mode 100644
index 0000000000..c7dce35dd3
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/setprototypeof/index.html
@@ -0,0 +1,78 @@
+---
+title: Reflect.setPrototypeOf()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf
+---
+<div>{{JSRef}}</div>
+
+<p>除了返回类型以外,静态方法 <code><strong>Reflect</strong></code><strong><code>.setPrototypeOf()</code></strong> 与 {{jsxref("Object.setPrototypeOf()")}} 方法是一样的。它可设置对象的原型(即内部的 <code>[[Prototype]]</code> 属性)为另一个对象或 {{jsxref("null")}},如果操作成功返回 <code>true</code>,否则返回 <code>false</code>。</p>
+
+<p>{{EmbedInteractiveExample("pages/js/reflect-setprototypeof.html")}}</p>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">Reflect.setPrototypeOf(<em>target</em>, <em>prototype</em>)
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt><em><code>target</code></em></dt>
+ <dd>设置原型的目标对象。</dd>
+ <dt><em><code>prototype</code></em></dt>
+ <dd>对象的新原型(一个对象或 {{jsxref("null")}})。</dd>
+</dl>
+
+<h3 id="返回值">返回值</h3>
+
+<p>返回一个 {{jsxref("Boolean")}} 值表明是否原型已经成功设置。</p>
+
+<h3 id="异常">异常</h3>
+
+<p>如果 <em><code>target</code></em> 不是 {{jsxref("Object")}} ,或 <em><code>prototype</code> </em>既不是对象也不是 {{jsxref("null")}},抛出一个 {{jsxref("TypeError")}} 异常。</p>
+
+<h2 id="描述">描述</h2>
+
+<p><code>Reflect.setPrototypeOf</code> 方法改变指定对象的原型(即,内部的 <code>[[Prototype]]</code> 属性值)。</p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="使用_Reflect.setPrototypeOf">使用 <code>Reflect.setPrototypeOf()</code></h3>
+
+<pre class="brush: js">Reflect.setPrototypeOf({}, Object.prototype); // true
+
+// It can change an object's [[Prototype]] to null.
+Reflect.setPrototypeOf({}, null); // true
+
+// Returns false if target is not extensible.
+Reflect.setPrototypeOf(Object.freeze({}), null); // false
+
+// Returns false if it cause a prototype chain cycle.
+var target = {};
+var proto = Object.create(target);
+Reflect.setPrototypeOf(target, proto); // false
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.setprototypeof', 'Reflect.setPrototypeOf')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{Compat("javascript.builtins.Reflect.setPrototypeOf")}}</p>
+
+<h2 id="相关链接">相关链接</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Object.setPrototypeOf()")}}</li>
+</ul>
diff --git a/files/zh-cn/web/javascript/reference/global_objects/reflect/比较_reflect_和_object_方法/index.html b/files/zh-cn/web/javascript/reference/global_objects/reflect/比较_reflect_和_object_方法/index.html
new file mode 100644
index 0000000000..43023eae7f
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/reflect/比较_reflect_和_object_方法/index.html
@@ -0,0 +1,134 @@
+---
+title: 比较 Reflect 和 Object 方法
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/比较_Reflect_和_Object_方法
+tags:
+ - Guide
+ - JavaScript
+ - Object
+ - Overview
+ - Reflect
+translation_of: >-
+ Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods
+---
+<div>{{jssidebar}}</div>
+
+<p>ES2015中引入的 {{jsxref("Reflect")}} 对象是一个内置对象,提供了与JavaScript对象交互的方法。<code>Reflect</code> 上存在的一些静态函数也对应于ES2015之前的{{jsxref("Object")}}上可用的方法。尽管某些方法在行为上看似相似,但它们之间常常存在细微的差异。</p>
+
+<p>下表详细介绍了<code>Object</code> 和 <code>Reflect</code> API上可用方法之间的差异。请注意,如果API中不存在某种方法,则将其标记为N/A。</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Method Name</th>
+ <th scope="col"><code>Object</code></th>
+ <th scope="col"><code>Reflect</code></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>defineProperty()</code></td>
+ <td>
+ <p>{{jsxref("Object.defineProperty()")}} 返回传递给函数的对象。如果未在对象上成功定义属性,则返回<code>TypeError</code>。</p>
+ </td>
+ <td>
+ <p>如果在对象上定义了属性,则{{jsxref("Reflect.defineProperty()")}}返回<code>true</code>,否则返回<code>false</code>。</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>defineProperties()</code></td>
+ <td>
+ <p>{{jsxref("Object.defineProperties()")}} 返回传递给函数的对象。如果未在对象上成功定义属性,则返回<code>TypeError</code>。</p>
+ </td>
+ <td>N/A</td>
+ </tr>
+ <tr>
+ <td><code>set()</code></td>
+ <td>N/A</td>
+ <td>
+ <p>如果在对象上成功设置了属性,则{{jsxref("Reflect.set()")}}返回<code>true</code>,否则返回<code>false</code>。如果目标不是<code>Object</code>,则抛出<code>TypeError</code></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>get()</code></td>
+ <td>N/A</td>
+ <td>
+ <p>{{jsxref("Reflect.get()")}}返回属性的值。如果目标不是<code>Object</code>,则抛出<code>TypeError</code>。</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>deleteProperty()</code></td>
+ <td>N/A</td>
+ <td>
+ <p>如果属性从对象中删除,则{{jsxref("Reflect.deleteProperty()")}}返回<code>true</code>,否则返回<code>false</code>。</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>getOwnPropertyDescriptor()</code></td>
+ <td>
+ <p>如果传入的对象参数上存在{{jsxref("Object.getOwnPropertyDescriptor()")}} ,则会返回给定属性的属性描述符,如果不存在,则返回<code>undefined</code>。</p>
+ </td>
+ <td>
+ <p>如果给定属性存在于对象上,则{{jsxref("Reflect.getOwnPropertyDescriptor()")}} 返回给定属性的属性描述符。如果不存在则返回<code>undefined</code>,如果传入除对象(原始值)以外的任何东西作为第一个参数,则返回<code>TypeError</code></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>getOwnPropertyDescriptors()</code></td>
+ <td>
+ <p>{{jsxref("Object.getOwnPropertyDescriptors()")}} 返回一个对象,其中包含每个传入对象的属性描述符。如果传入的对象没有拥有的属性描述符,则返回一个空对象。</p>
+ </td>
+ <td>N/A</td>
+ </tr>
+ <tr>
+ <td><code>getPrototypeOf()</code></td>
+ <td>
+ <p>{{jsxref("Object.getPrototypeOf()")}}返回给定对象的原型。如果没有继承的原型,则返回<code>null。</code>在ES5中为非对象抛出<code>TypeError</code>,但在ES2015中强制为非对象。</p>
+ </td>
+ <td>
+ <p>{{jsxref("Reflect.getPrototypeOf()")}}返回给定对象的原型。如果没有继承的原型,则返回null,并为非对象抛出<code>TypeError</code>。</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>setPrototypeOf()</code></td>
+ <td>
+ <p>如果对象的原型设置成功,则{{jsxref("Object.setPrototypeOf()")}}返回对象本身。如果设置的原型不是<code>Object</code>或<code>null</code>,或者被修改的对象的原型不可扩展,则抛出<code>TypeError</code>。</p>
+ </td>
+ <td>
+ <p>如果在对象上成功设置了原型,则{{jsxref("Reflect.setPrototypeOf()")}} 返回true,否则返回false(包括原型是否不可扩展)。如果传入的目标不是<code>Object</code>,或者设置的原型不是<code>Object</code>或<code>null</code>,则抛出<code>TypeError</code>。</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>isExtensible()</code></td>
+ <td>
+ <p>如果对象是可扩展的,则Object.isExtensible()返回true,否则返回false。如果第一个参数不是对象(原始值),则在ES5中抛出<code>TypeError</code>。在ES2015中,它将被强制为不可扩展的普通对象并返回<code>false</code>。</p>
+ </td>
+ <td>
+ <p>如果对象是可扩展的,则{{jsxref("Reflect.isExtensible()")}} 返回<code>true</code>,否则返回<code>false</code>。如果第一个参数不是对象(原始值),则抛出<code>TypeError</code>。</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>preventExtensions()</code></td>
+ <td>
+ <p>{{jsxref("Object.preventExtensions()")}} 返回被设为不可扩展的对象。如果参数不是对象(原始值),则在ES5中抛出<code>TypeError</code>。在ES2015中,参数如为不可扩展的普通对象,然后返回对象本身。</p>
+ </td>
+ <td>
+ <p>returns <code>true</code> if the object has been made non-extensible, and <code>false</code> if it has not. Throws a <code>TypeError</code> if the argument is not an object (a primitive).</p>
+
+ <p>如果对象已变得不可扩展,则{{jsxref("Reflect.preventExtensions()")}} 返回<code>true</code>,否则返回<code>false</code>。如果参数不是对象(原始值),则抛出<code>TypeError</code>。</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>keys()</code></td>
+ <td>
+ <p>{{jsxref("Object.keys()")}}返回一个字符串<code>数组</code>,该字符串映射到目标对象自己的(可枚举)属性键。如果目标不是对象,则在ES5中抛出<code>TypeError</code>,但将非对象目标强制为ES2015中的对象</p>
+ </td>
+ <td>N/A</td>
+ </tr>
+ <tr>
+ <td><code>ownKeys()</code></td>
+ <td>N/A</td>
+ <td>
+ <p>{{jsxref("Reflect.ownKeys()")}}返回一个属性名称<font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">数组</span></font>,该属性名称映射到目标对象自己的属性键。如果目标不是<code>Object</code>,则抛出<code>TypeError</code>。</p>
+ </td>
+ </tr>
+ </tbody>
+</table>