diff options
| author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
|---|---|---|
| committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
| commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
| tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/zh-cn/web/javascript/reference/global_objects/reflect | |
| parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
| download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip | |
initial commit
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/reflect')
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> |
