diff options
Diffstat (limited to 'files/ja/web/javascript/reference/global_objects/reflect')
15 files changed, 1495 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/global_objects/reflect/apply/index.html b/files/ja/web/javascript/reference/global_objects/reflect/apply/index.html new file mode 100644 index 0000000000..d845544c01 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/apply/index.html @@ -0,0 +1,95 @@ +--- +title: Reflect.apply() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/apply +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/apply +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Reflect.apply()</code></strong> メソッドは、指定された引数とともに対象となる関数を呼び出します。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-apply.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.apply(<var>target</var>, <var>thisArgument</var>, <var>argumentsList</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>呼び出し対象の関数。</dd> + <dt><code><var>thisArgument</var></code></dt> + <dd><code><var>target</var></code> の呼び出す際の <code>this</code> 値を提供する。</dd> + <dt><code><var>argumentsList</var></code></dt> + <dd><code><var>target</var></code> と一緒に呼び出す引数を指定する配列風オブジェクト。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された <code><var>target</var></code> 値と引数の条件で対象の関数を呼び出したときの結果です。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code><var>target</var></code> が呼び出せない場合。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p>ES5 では、ふつう {{jsxref("Function.prototype.apply()")}} メソッドを使用することで、指定された <code>this</code> の値と <code>arguments</code> で配列 (または <a href="/ja/docs/Web/JavaScript/Guide/Indexed_collections#Working_with_array-like_objects">配列風オブジェクト</a>) により引数を指定することで、関数を呼び出すことができます。</p> + +<pre class="brush: js notranslate">Function.prototype.apply.call(Math.floor, undefined, [1.75]);</pre> + +<p><code>Reflect.apply()</code> を使うと、それほど冗長ではなく理解しやすくなります。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.apply" name="Using_Reflect.apply">Reflect.apply() の使用</h3> + +<pre class="brush: js notranslate">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="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.apply', 'Reflect.apply')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.apply")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Function.prototype.apply()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html b/files/ja/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html new file mode 100644 index 0000000000..533fe760ec --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html @@ -0,0 +1,100 @@ +--- +title: Reflect と Object のメソッドの比較 +slug: >- + Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods +tags: + - Guide + - JavaScript + - JavaScript Object Model + - Object + - Overview + - Reflect +translation_of: >- + Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods +--- +<div>{{jssidebar}}</div> + +<p>The {{jsxref("Reflect")}} object, introduced in ES2015, is a built-in object that provides methods to interface with JavaScript objects. Some of the static functions that exist on <code>Reflect</code> also correspond to methods available on {{jsxref("Object")}}, which predates ES2015. Although some of the methods appear to be similar in their behavior, there are often subtle differences between them.</p> + +<p>The table below details the differences between the methods available on the <code>Object</code> and <code>Reflect</code> APIs. Please note that if a method does not exist in an API, it is marked as 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>{{jsxref("Object.defineProperty()")}} returns the object that was passed to the function. Returns a <code>TypeError</code> if the property was not successfully defined on the object.</td> + <td>{{jsxref("Reflect.defineProperty()")}} returns <code>true</code> if the property was defined on the object and <code>false</code> if it was not.</td> + </tr> + <tr> + <td><code>defineProperties()</code></td> + <td>{{jsxref("Object.defineProperties()")}} returns the objects that were passed to the function. Returns a <code>TypeError</code> if any properties were not successfully defined on the object.</td> + <td>N/A</td> + </tr> + <tr> + <td><code>set()</code></td> + <td>N/A</td> + <td>{{jsxref("Reflect.set()")}} returns <code>true</code> if the property was set successfully on the object and <code>false</code> if it was not. Throws a <code>TypeError</code> if the target was not an <code>Object</code>.</td> + </tr> + <tr> + <td><code>get()</code></td> + <td>N/A</td> + <td>{{jsxref("Reflect.get()")}} returns the value of the property. Throws a <code>TypeError</code> if the target was not an <code>Object</code>.</td> + </tr> + <tr> + <td><code>deleteProperty()</code></td> + <td>N/A</td> + <td>{{jsxref("Reflect.deleteProperty()")}} returns <code>true</code> if the property was deleted from the object and <code>false</code> if it was not.</td> + </tr> + <tr> + <td><code>getOwnPropertyDescriptor()</code></td> + <td>{{jsxref("Object.getOwnPropertyDescriptor()")}} returns a property descriptor of the given property if it exists on the object argument passed in, and returns <code>undefined</code> if it does not exist. However, if an object is not passed in as the first argument, it will be coerced into an object.</td> + <td>{{jsxref("Reflect.getOwnPropertyDescriptor()")}} returns a property descriptor of the given property if it exists on the object. Returns <code>undefined</code> if it does not exist, and a <code>TypeError</code> if anything other than an object (a primitive) is passed in as the first argument.</td> + </tr> + <tr> + <td><code>getOwnPropertyDescriptors()</code></td> + <td>{{jsxref("Object.getOwnPropertyDescriptors()")}} returns an object containing a property descriptor of each passed-in object. Returns an empty object if the passed-in object has no owned property descriptors.</td> + <td>N/A</td> + </tr> + <tr> + <td><code>getPrototypeOf()</code></td> + <td>{{jsxref("Object.getPrototypeOf()")}} returns the prototype of the given object. Returns <code>null</code> if there are no inherited properties. Throws a <code>TypeError</code> for non-objects in ES5, but coerces non-objects in ES2015.</td> + <td>{{jsxref("Reflect.getPrototypeOf()")}} returns the prototype of the given object. Returns <code>null</code> if there are no inherited properties, and throws a <code>TypeError</code> for non-objects.</td> + </tr> + <tr> + <td><code>setPrototypeOf()</code></td> + <td>{{jsxref("Object.setPrototypeOf()")}} returns the object itself if its prototype was set successfully. Throws a <code>TypeError</code> if the prototype being set was anything other than an <code>Object</code> or <code>null</code>, or if the prototype for the object being modified is non-extensible. </td> + <td>{{jsxref("Reflect.setPrototypeOf()")}} returns <code>true</code> if the prototype was successfully set on the object and <code>false</code> if it wasn't (including if the prototype is non-extensible). Throws a <code>TypeError</code> if the target passed in was not an <code>Object</code>, or if the prototype being set was anything other than an <code>Object</code> or <code>null</code>.</td> + </tr> + <tr> + <td><code>isExtensible()</code></td> + <td>{{jsxref("Object.isExtensible()")}} returns <code>true</code> if the object is extensible, and <code>false</code> if it is not. Throws a <code>TypeError</code> in ES5 if the first argument is not an object (a primitive). In ES2015, it will be coerced into a non-extensible, ordinary object and will return <code>false</code>.</td> + <td> + <p>{{jsxref("Reflect.isExtensible()")}} returns <code>true</code> if the object is extensible, and <code>false</code> if it is not. Throws a <code>TypeError</code> if the first argument is not an object (a primitive).</p> + </td> + </tr> + <tr> + <td><code>preventExtensions()</code></td> + <td> + <p>{{jsxref("Object.preventExtensions()")}} returns the object that is being made non-extensible. Throws a <code>TypeError</code>in ES5 if the argument is not an object (a primitive). In ES2015, treats the argument as a non-extensible, ordinary object and returns the object itself.</p> + </td> + <td>{{jsxref("Reflect.preventExtensions()")}} 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).</td> + </tr> + <tr> + <td><code>keys()</code></td> + <td>{{jsxref("Object.keys()")}} returns an <code>Array</code> of strings that map to the target object's own (enumerable) property keys. Throws a <code>TypeError</code> in ES5 if the target is not an object, but coerces non-object targets into objects in ES2015.</td> + <td>N/A</td> + </tr> + <tr> + <td><code>ownKeys()</code></td> + <td>N/A</td> + <td>{{jsxref("Reflect.ownKeys()")}} returns an <code>Array</code> of property names that map to the target object's own property keys. Throws a <code>TypeError</code> if the target is not an <code>Object</code>.</td> + </tr> + </tbody> +</table> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/construct/index.html b/files/ja/web/javascript/reference/global_objects/reflect/construct/index.html new file mode 100644 index 0000000000..f16711c6f7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/construct/index.html @@ -0,0 +1,148 @@ +--- +title: Reflect.construct() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/construct +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect + - メソッド +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct +--- +<div>{{JSRef}}</div> + +<p>静的な <code><strong>Reflect.construct()</strong></code> メソッドは {{jsxref("Operators/new", "new")}} 演算子のように、ただし関数として動作します。これは <code>new target(...args)</code> の呼び出しと同等です。このメソッドはオプションを追加することで、別なプロトタイプを指定することができます。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-construct.html", "taller")}}</div> + +<p class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">Reflect.construct(<var>target</var>, <var>argumentsList</var>[, <var>newTarget</var>]) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>呼び出し対象の関数。</dd> + <dt><code><var>argumentsList</var></code></dt> + <dd>配列風オブジェクトで、 <code><var>target</var></code> の呼び出しの引数を指定する。</dd> + <dt><code><var>newTarget</var></code> {{optional_inline}}</dt> + <dd>プロトタイプを使用するコンストラクター。 <a href="/ja/docs/Web/JavaScript/Reference/Operators/new.target"><code>new.target</code></a> も参照してください。 <code><var>newTarget</var></code> が存在しない場合は、既定値は <code><var>target</var></code> になります。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p><code><var>target</var></code> (または、もしあれば <code><var>newTarget</var></code>) の新しいインスタンスで、 <code><var>target</var></code> に <code><var>argumentsList</var></code> を渡してコンストラクターとして呼び出すことで初期化します。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code><var>target</var></code> または <code><var>newTarget</var></code> がコンストラクターではない場合。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.construct()</code> によって、可変長引数を指定してコンストラクターを呼び出すことができます。 (これは a href="/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax">スプレッド構文と<a href="/ja/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> 演算子</a> を組み合わせて使用することでも可能です。)</p> + +<pre class="brush: js">let obj = new Foo(...<var>args</var>) +let obj = Reflect.construct(Foo, <var>args</var>) +</pre> + +<h3 id="Reflect.construct_vs_Object.create" name="Reflect.construct_vs_Object.create"><code>Reflect.construct()</code> と <code>Object.create()</code></h3> + +<p><code>Reflect</code> が導入される前は、オブジェクトを構築するのにコンストラクターとプロトタイプの任意の組み合わせで {{jsxref("Object.create()")}} を使用して構築することができました。</p> + +<pre class="brush: js">function OneClass() { + this.name = 'one' +} + +function OtherClass() { + this.name = 'other' +} + +// この呼び出しは、 +let obj1 = Reflect.construct(OneClass, <var>args</var>, OtherClass) + +// ...これと同じ結果をもたらします。 +let obj2 = Object.create(OtherClass.prototype) +OneClass.apply(obj2, <var>args</var>) + +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>この2つの手法の最終結果は同じですが、その過程に重要な違いがあります。 <code>Object.create()</code> と {{jsxref("Function.prototype.apply()")}} を使用する場合、 <code>new.target</code> 演算子はコンストラクター内で <code>undefined</code> を返します。これは、 <code>new</code> 演算子を用いないためです。</p> + +<p>一方、 <code>Reflect.construct()</code> を呼び出す場合は、 <code>new.target</code> 演算子は、提供されていれば <code><var>newTarget</var></code> を指し、そうでなければ <code>target</code> を指します。</p> + +<pre class="brush: js">function OneClass() { + console.log('OneClass') + console.log(new.target) +} +function OtherClass() { + console.log('OtherClass') + console.log(new.target) +} + +let obj1 = Reflect.construct(OneClass, <var>args</var>) +// Output: +// OneClass +// function OneClass { ... } + +let obj2 = Reflect.construct(OneClass, <var>args</var>, OtherClass) +// Output: +// OneClass +// function OtherClass { ... } + +let obj3 = Object.create(OtherClass.prototype); +OneClass.apply(obj3, <var>args</var>) +// Output: +// OneClass +// undefined +</pre> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.construct" name="Using_Reflect.construct"><code>Reflect.construct()</code> の使用</h3> + +<pre class="brush: js">let d = Reflect.construct(Date, [1776, 6, 4]) +d instanceof Date // true +d.getFullYear() // 1776 +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.construct', 'Reflect.construct')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.construct")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Operators/new", "new")}}</li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Operators/new.target">new.target</a></code></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/defineproperty/index.html b/files/ja/web/javascript/reference/global_objects/reflect/defineproperty/index.html new file mode 100644 index 0000000000..1ecbfb8a55 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/defineproperty/index.html @@ -0,0 +1,100 @@ +--- +title: Reflect.defineProperty() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Reflect.defineProperty()</code></strong> メソッドは、{{jsxref("Object.defineProperty()")}} と似ていますが、 {{jsxref("Boolean")}} を返します。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-defineproperty.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.defineProperty(<var>target</var>, <var>propertyKey</var>, <var>attributes</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>プロパティを定義する対象のオブジェクトです。</dd> + <dt><code><var>propertyKey</var></code></dt> + <dd>定義または修正をするプロパティ名です。</dd> + <dt><code><var>attributes</var></code></dt> + <dd>定義または修正されているプロパティのための属性です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>プロパティの定義に成功したかどうかを示す {{jsxref("Boolean")}} です。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code>target</code> が {{jsxref("Object")}} ではなかった場合。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.defineProperty</code> メソッドは、オブジェクトのプロパティの正確な追加や修正を行います。詳細は、類似メソッドの {{jsxref("Object.defineProperty")}} を参照してください。</p> + +<div class="blockIndicator note"><code>Object.defineProperty</code> はプロパティの定義が成功しなかった場合、オブジェクトを返すか {{jsxref("TypeError")}} を発生させます。しかし、<code>Reflect.defineProperty</code> は単純に、プロパティの定義が成功したかどうかを示す {{jsxref("Boolean")}} を返します。 + + +</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.defineProperty" name="Using_Reflect.defineProperty">Reflect.defineProperty() の使用</h3> + +<pre class="brush: js notranslate">let obj = {} +Reflect.defineProperty(obj, 'x', {value: 7}) // true +obj.x // 7 +</pre> + +<h3 id="Checking_if_property_definition_has_been_successful" name="Checking_if_property_definition_has_been_successful">プロパティ定義が成功したかチェックする</h3> + +<p>成功してオブジェクトを返すか、失敗して {{jsxref("TypeError")}} をスローする {{jsxref("Object.defineProperty")}} を使う場合、プロパティの定義中に発生する何らかの例外をキャッチするには、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/try...catch">try...catch</a></code> ブロックを使用します。</p> + +<p><code>Reflect.defineProperty</code> は真偽値の成功ステータスを返すので、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code> ブロックを使用することができます。</p> + +<pre class="brush: js notranslate">if (Reflect.defineProperty(target, property, attributes)) { + // success +} else { + // failure +}</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.defineProperty")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Object.defineProperty()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/deleteproperty/index.html b/files/ja/web/javascript/reference/global_objects/reflect/deleteproperty/index.html new file mode 100644 index 0000000000..36ec316d62 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/deleteproperty/index.html @@ -0,0 +1,100 @@ +--- +title: Reflect.deleteProperty() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Reflect.defineProperty()</code></strong> メソッドは、{{jsxref("Object.defineProperty()")}} と似ていますが、 {{jsxref("Boolean")}} を返します。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-defineproperty.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.defineProperty(<var>target</var>, <var>propertyKey</var>, <var>attributes</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>プロパティを定義する対象のオブジェクトです。</dd> + <dt><code><var>propertyKey</var></code></dt> + <dd>定義または修正をするプロパティ名です。</dd> + <dt><code><var>attributes</var></code></dt> + <dd>定義または修正されているプロパティのための属性です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>プロパティの定義に成功したかどうかを示す {{jsxref("Boolean")}} です。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code>target</code> が {{jsxref("Object")}} ではなかった場合。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.defineProperty</code> メソッドは、オブジェクトのプロパティの正確な追加や修正を行います。詳細は、類似メソッドの {{jsxref("Object.defineProperty")}} を参照してください。</p> + +<div class="blockIndicator note"><code>Object.defineProperty</code> はプロパティの定義が成功しなかった場合、オブジェクトを返すか {{jsxref("TypeError")}} を発生させます。しかし、<code>Reflect.defineProperty</code> は単純に、プロパティの定義が成功したかどうかを示す {{jsxref("Boolean")}} を返します。 + + +</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.defineProperty" name="Using_Reflect.defineProperty">Reflect.defineProperty() の使用</h3> + +<pre class="brush: js notranslate">let obj = {} +Reflect.defineProperty(obj, 'x', {value: 7}) // true +obj.x // 7 +</pre> + +<h3 id="Checking_if_property_definition_has_been_successful" name="Checking_if_property_definition_has_been_successful">プロパティ定義が成功したかチェックする</h3> + +<p>成功してオブジェクトを返すか、失敗して {{jsxref("TypeError")}} をスローする {{jsxref("Object.defineProperty")}} を使う場合、プロパティの定義中に発生する何らかの例外をキャッチするには、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/try...catch">try...catch</a></code> ブロックを使用します。</p> + +<p><code>Reflect.defineProperty</code> は真偽値の成功ステータスを返すので、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code> ブロックを使用することができます。</p> + +<pre class="brush: js notranslate">if (Reflect.defineProperty(target, property, attributes)) { + // success +} else { + // failure +}</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.defineProperty")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Object.defineProperty()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/get/index.html b/files/ja/web/javascript/reference/global_objects/reflect/get/index.html new file mode 100644 index 0000000000..9ad5516167 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/get/index.html @@ -0,0 +1,97 @@ +--- +title: Reflect.get() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/get +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect + - メソッド +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/get +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Reflect.get()</code></strong> メソッドは、オブジェクト (<code>target[propertyKey]</code>) からプロパティを関数として取得するように動作します。動作します。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-get.html")}}</div> + +<p class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">Reflect.get(<var>target</var>, <var>propertyKey</var>[, <var>receiver</var>]) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>プロパティを取得する対象のオブジェクト。</dd> + <dt><code><var>propertyKey</var></code></dt> + <dd>設定するプロパティ名。</dd> + <dt><code><var>receiver</var></code> {{optional_inline}}</dt> + <dd>ゲッターがあった場合、 <code><var>target</var></code> への呼び出しで使用する <code>this</code> の値を提供します。 {{jsxref("Proxy")}} とともに使用すると、 <code><var>target</var></code> から継承しているオブジェクトにすることができます。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>プロパティの値です。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p><code><var>target</var></code> が {{jsxref("Object")}} でなかった場合、 {{jsxref("TypeError")}} が発生します。。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.get</code> メソッドはオブジェクトのプロパティを取得します。機能としては{{jsxref("Operators/Property_Accessors", "プロパティアクセサー", "", 1)}}構文と似ています。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.get" name="Using_Reflect.get"><code>Reflect.get()</code> の使用</h3> + +<pre class="brush: js">// オブジェクト +let obj = { x: 1, y: 2 } +Reflect.get(obj, 'x') // 1 + +// 配列 +Reflect.get(['zero', 'one'], 1) // "one" + +// Proxy with a get handler +let x = {p: 1}; + +let obj = new Proxy(x, { + get(t, k, r) { + return k + 'bar' + } +}) +Reflect.get(obj, 'foo') // "foobar" +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.get', 'Reflect.get')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.get")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/Property_Accessors">プロパティアクセサー</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html b/files/ja/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html new file mode 100644 index 0000000000..5b4696de1c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html @@ -0,0 +1,96 @@ +--- +title: Reflect.getOwnPropertyDescriptor() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor +--- +<div>{{JSRef}}</div> + +<p><span class="seoSummary">静的な <strong><code>Reflect.getOwnPropertyDescriptor()</code></strong> メソッドは {{jsxref("Object.getOwnPropertyDescriptor()")}} と似ています。オブジェクトにプロパティが存在する場合は、指定されたプロパティのプロパティ記述子を返します。一方、プロパティが存在しない場合は {{jsxref("undefined")}} を返します。</span></p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-getownpropertydescriptor.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.getOwnPropertyDescriptor(<var>target</var>, <var>propertyKey</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>プロパティを探す対象のオブジェクト。</dd> + <dt><code><var>propertyKey</var></code></dt> + <dd>所有しているプロパティ記述子を取得するためのプロパティ名。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p><code><var>target</var></code> オブジェクト内にプロパティが存在する場合は、プロパティ記述子オブジェクト、または {{jsxref("undefined")}}。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code><var>target</var></code> が {{jsxref("Object")}} ではない場合</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.getOwnPropertyDescriptor</code> オブジェクトにプロパティが存在する場合、与えられたプロパティのプロパティディスクリプタを返します。一方、プロパティが存在しない場合は、{{jsxref("undefined")}} を返します。{{jsxref("Object.getOwnPropertyDescriptor()")}} との唯一の違いは、非オブジェクトの対象がどのようにバンドルされるかだけです。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.getOwnPropertyDescriptor" name="Using_Reflect.getOwnPropertyDescriptor">Reflect.getOwnPropertyDescriptor() の使用</h3> + +<pre class="brush: js notranslate">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="Difference_to_Object.getOwnPropertyDescriptor" name="Difference_to_Object.getOwnPropertyDescriptor">Object.getOwnPropertyDescriptor() との違い</h3> + +<p>このメソッドへの最初の引数がオブジェクトではない (プリミティブであった) 場合、 {{jsxref("TypeError")}} が発生します。 {{jsxref("Object.getOwnPropertyDescriptor")}} だと、非オブジェクトである最初の引数は強制的にオブジェクトに変換されます。</p> + +<pre class="brush: js notranslate">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="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.getownpropertydescriptor', 'Reflect.getOwnPropertyDescriptor')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.getOwnPropertyDescriptor")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Object.getOwnPropertyDescriptor()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/getprototypeof/index.html b/files/ja/web/javascript/reference/global_objects/reflect/getprototypeof/index.html new file mode 100644 index 0000000000..9891b10867 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/getprototypeof/index.html @@ -0,0 +1,97 @@ +--- +title: Reflect.getPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Reflect.getPrototypeOf()</code></strong> メソッドは、{{jsxref("Object.getPrototypeOf()")}} とほぼ同じメソッドです。これは指定したオブジェクトのプロトタイプ (つまり、内部の <code>[[Prototype]]</code> プロパティの値) を返します。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-getprototypeof.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.getPrototypeOf(<var>target</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code>target</code></dt> + <dd>プロトタイプを取得する対象のオブジェクトです。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>与えられたオブジェクトのプロトタイプです。継承されたプロパティがない場合、{{jsxref("null")}} を返します。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p><code>target</code> が {{jsxref("Object")}} でない場合に {{jsxref("TypeError")}} がスローされます。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.getPrototypeOf</code> メソッドは、指定したオブジェクトのプロトタイプ (つまり、内部の <code>[[Prototype]]</code> プロパティの値) を返します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.getPrototypeOf" name="Using_Reflect.getPrototypeOf">Reflect.getPrototypeOf() の使用</h3> + +<pre class="brush: js notranslate">Reflect.getPrototypeOf({}) // Object.prototype +Reflect.getPrototypeOf(Object.prototype) // null +Reflect.getPrototypeOf(Object.create(null)) // null +</pre> + +<h3 id="Compared_to_Object.getPrototypeOf" name="Compared_to_Object.getPrototypeOf">Object.getPrototypeOf() との比較</h3> + +<pre class="brush: js notranslate">// 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 として扱います +Object.getPrototypeOf('foo') // String.prototype +Reflect.getPrototypeOf('foo') // Throws TypeError + +// To mimic the Object ES2015 behavior you need to coerce +Reflect.getPrototypeOf(Object('foo')) // String.prototype +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.getprototypeof', 'Reflect.getPrototypeOf')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.getPrototypeOf")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Object.getPrototypeOf()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/has/index.html b/files/ja/web/javascript/reference/global_objects/reflect/has/index.html new file mode 100644 index 0000000000..eb077b2394 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/has/index.html @@ -0,0 +1,99 @@ +--- +title: Reflect.has() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/has +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/has +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Reflect.has()</code></strong> メソッドは、機能としては <a href="/ja/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 演算子</a>のように動作します。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-has.html")}}</div> + +<p class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.has(<var>target</var>, <var>propertyKey</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>プロパティを探す対象のオブジェクト。</dd> + <dt><code><var>propertyKey</var></code></dt> + <dd>チェックするプロパティ名。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>対象がプロパティを持つかどうかを示す {{jsxref("Boolean")}} 値。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p><code><var>target</var></code> が {{jsxref("Object")}} でなかった場合、 {{jsxref("TypeError")}} が発生します。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.has</code> メソッドは、オブジェクトプロパティがあるかをチェックします。機能としては <a href="/ja/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 演算子</a>のように動作します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.has" name="Using_Reflect.has">Reflect.has() の使用</h3> + +<pre class="brush: js notranslate">Reflect.has({x: 0}, 'x') // true +Reflect.has({x: 0}, 'y') // false + +// プロトタイプチェーンのプロパティがあるため、true が返る +Reflect.has({x: 0}, 'toString') + +// Proxy with .has() handler method +obj = new Proxy({}, { + has(t, k) { return k.startsWith('door') } +}); +Reflect.has(obj, 'doorbell') // true +Reflect.has(obj, 'dormitory') // false +</pre> + +<p><code>Reflect.has</code> は継承されたプロパティについて <code>true</code> を返し、これは <a href="/en-US/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 演算子</a>と同様です。</p> + +<pre class="brush: js notranslate">const a = {foo: 123} +const b = {__proto__: a} +const c = {__proto__: b} +// The prototype chain is: c -> b -> a +Reflect.has(c, 'foo') // true +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.has', 'Reflect.has')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.has")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 演算子</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/index.html b/files/ja/web/javascript/reference/global_objects/reflect/index.html new file mode 100644 index 0000000000..6f64386a31 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/index.html @@ -0,0 +1,84 @@ +--- +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><span class="seoSummary"><strong>Reflect</strong> は、介入可能な JavaScript 操作に対するメソッドを提供する組込みオブジェクトです。メソッドは<a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler">プロキシハンドラー</a>のメソッドと同じです。 <code>Reflect</code> は関数オブジェクトではありませんので、構築することはできません。</span></p> + +<h2 id="Description" name="Description">解説</h2> + +<p>他のグローバルオブジェクトとは異なり、 <code>Reflect</code> はコンストラクターではありません。 <a href="/ja/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> 演算子</a>で使用したり、 <code>Reflect</code> オブジェクトを関数として呼び出すことはできません。 <code>Reflect</code> のすべてのプロパティとメソッドは ({{jsxref("Math")}} オブジェクトと同様に) 静的です。</p> + +<p><code>Reflect</code> オブジェクトは<a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler">プロキシハンドラーメソッド</a>と同じ名前をもつ、下記の関数を提供します。</p> + +<p>これらのメソッドの一部は {{jsxref("Object")}} の対応するメソッドとも同じですが、これらの間には<a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods">いくらか微妙な違い</a>があります。</p> + +<h2 id="Methods" name="Methods">メソッド</h2> + +<dl> + <dt>{{jsxref("Reflect.apply()", "Reflect.apply(<var>target</var>, <var>thisArgument</var>, <var>argumentsList</var>)")}}</dt> + <dd><code><var>target</var></code> 関数を、引数 <code><var>argumentsList</var></code> で指定された引数で呼び出します。 {{jsxref("Function.prototype.apply()")}} も参照してください。</dd> + <dt>{{jsxref("Reflect.construct()", "Reflect.construct(<var>target</var>, <var>argumentsList</var>[, <var>newTarget</var>])")}}</dt> + <dd>関数としての <a href="/ja/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> 演算子</a>です。 <code>new <var>target</var>(...<var>argumentsList</var>)</code> を呼び出すのと等価です。別なプロトタイプを指定するためにオプションを指定することもできます。</dd> + <dt>{{jsxref("Reflect.defineProperty()", "Reflect.defineProperty(<var>target</var>, <var>propertyKey</var>, <var>attributes</var>)")}}</dt> + <dd>{{jsxref("Object.defineProperty()")}} と同様です。返値は {{jsxref("Boolean")}} で、プロパティが定義できた場合は <code>true</code> を返します。</dd> + <dt>{{jsxref("Reflect.deleteProperty()", "Reflect.deleteProperty(<var>target</var>, <var>propertyKey</var>)")}}</dt> + <dd>関数としての <a href="/ja/docs/Web/JavaScript/Reference/Operators/delete"><code>delete</code> 演算子</a>です。 <code>delete <var>target</var>[<var>propertyKey</var>]</code> を呼び出すのと等価です。</dd> + <dt>{{jsxref("Reflect.get()", "Reflect.get(<var>target</var>, <var>propertyKey</var>[, <var>receiver</var>])")}}</dt> + <dd>このプロパティの値を返します。オブジェクトからのプロパティの取得 (<code>target[propertyKey]</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>{{jsxref("Boolean")}} で対象がそのプロパティを持っているかどうかを返します。固有の場合も継承の場合も含みます。 <a href="/ja/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()")}} と同じです。 {{jsxref("Boolean")}} を返し、 <code>true</code> ならば対象が拡張可能です。</dd> + <dt>{{jsxref("Reflect.ownKeys()", "Reflect.ownKeys(<var>target</var>)")}}</dt> + <dd>独自の (継承されているものではない) プロパティのキーをもつ文字列の配列を返します。</dd> + <dt>{{jsxref("Reflect.preventExtensions()", "Reflect.preventExtensions(<var>target</var>)")}}</dt> + <dd>{{jsxref("Object.preventExtensions()")}} に似ています。 {{jsxref("Boolean")}} を返し、 <code>true</code> は更新に成功した場合です。</dd> + <dt>{{jsxref("Reflect.set()", "Reflect.set(<var>target</var>, <var>propertyKey</var>, <var>value</var>[, <var>receiver</var>])")}}</dt> + <dd>値をプロパティに割り当てる関数です。更新に成功したら <code>true</code> となる {{jsxref("Boolean")}} を返します。</dd> + <dt>{{jsxref("Reflect.setPrototypeOf()", "Reflect.setPrototypeOf(<var>target</var>, <var>prototype</var>)")}}</dt> + <dd>オブジェクトのプロトタイプを設定する関数です。 {{jsxref("Boolean")}} を返し、 <code>true</code> ならば成功です。</dd> +</dl> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect-object', 'Reflect')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Proxy")}} グローバルオブジェクト</li> + <li>{{jsxref("Proxy.handler", "handler")}} オブジェクト</li> +</ul> + +<div id="gtx-trans" style="position: absolute; left: 22px; top: 1930px;"> +<div class="gtx-trans-icon"></div> +</div> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/isextensible/index.html b/files/ja/web/javascript/reference/global_objects/reflect/isextensible/index.html new file mode 100644 index 0000000000..e3ee426638 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/isextensible/index.html @@ -0,0 +1,104 @@ +--- +title: Reflect.isExtensible() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible +--- +<div>{{JSRef}}</div> + +<p><span class="seoSummary">静的な <strong><code>Reflect.isExtensible()</code></strong> メソッドは 、オブジェクトを拡張できるかを測定します (オブジェクトに追加された新しいプロパティを持てるかどうか)。これは {{jsxref("Object.isExtensible()")}} に似ていますが、いくつかの<a href="#Difference_to_Object.isExtensible">違いがあります</a>。</span></p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-isextensible.html", "taller")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.isExtensible(<var>target</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>拡張できるかどうかをチェックする対象のオブジェクト。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>対象が拡張可能かどうかを示す {{jsxref("Boolean")}} 値。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code>target</code> が {{jsxref("Object")}} ではなかった場合。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.isExtensible</code> メソッドは 、オブジェクトを拡張できるかを測定します(オブジェクトに追加された新しいプロパティを持てるかどうか)。これは {{jsxref("Object.isExtensible()")}} と同じメソッドです。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.isExtensible" name="Using_Reflect.isExtensible">Reflect.isExtensible() の使用</h3> + +<p>{{jsxref("Object.isExtensible()")}} も見てください。</p> + +<pre class="brush: js notranslate">// 今オブジェクトは拡張可能。 +let empty = {} +Reflect.isExtensible(empty) // === true + +// ...しかし、変更できます +Reflect.preventExtensions(empty) +Reflect.isExtensible(empty) // === false + +// シールドオブジェクトは拡張できないように定義される。 +let sealed = Object.seal({}) +Reflect.isExtensible(sealed) // === false + +// フローズンオブジェクトも拡張できないように定義される。 +let frozen = Object.freeze({}) +Reflect.isExtensible(frozen) // === false +</pre> + +<h3 id="Difference_to_Object.isExtensible" name="Difference_to_Object.isExtensible">Object.isExtensible() との違い</h3> + +<p>このメソッドへの最初の引数がオブジェクトではなかった (プリミティブであった) 場合、これは {{jsxref("TypeError")}} を引き起こします。{{jsxref("Object.isExtensible()")}} だと、オブジェクトではない最初の引数はオブジェクトに強制的に変換されます。</p> + +<pre class="brush: js notranslate">Reflect.isExtensible(1) +// TypeError: 1 はオブジェクトではない + +Object.isExtensible(1) +// false +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.isextensible', 'Reflect.isExtensible')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.isExtensible")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Object.isExtensible()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/ownkeys/index.html b/files/ja/web/javascript/reference/global_objects/reflect/ownkeys/index.html new file mode 100644 index 0000000000..51b538dfba --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/ownkeys/index.html @@ -0,0 +1,88 @@ +--- +title: Reflect.ownKeys() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Reflect.ownKeys()</code></strong> メソッドは、 <code>target</code> オブジェクトが持つプロパティキーの配列を返します。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-ownkeys.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.ownKeys(<var>target</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>キーを取得する対象のオブジェクト</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p><code><var>target</var></code> オブジェクトが持つプロパティキーの {{jsxref("Array")}} 。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code><var>target</var></code> が {{jsxref("Object")}} ではない場合</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.ownKeys</code> メソッドは、対象のオブジェクトが持つプロパティキーの配列を返します。この返値は、<code>{{jsxref("Object.getOwnPropertyNames", "Object.getOwnPropertyNames(target)", "", 1)}}.concat({{jsxref("Object.getOwnPropertySymbols", "Object.getOwnPropertySymbols(target)", "", 1)}})</code> と同じです。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.ownKeys" name="Using_Reflect.ownKeys">Reflect.ownKeys() の使用</h3> + +<pre class="brush: js notranslate">Reflect.ownKeys({z: 3, y: 2, x: 1}) // [ "z", "y", "x" ] +Reflect.ownKeys([]) // ["length"] + +let sym = Symbol.for('comet') +let sym2 = Symbol.for('meteor') +let 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) ] +// 数字順のインデックス、 +// 挿入順の文字列、 +// 挿入順のシンボル +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.ownKeys")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Object.getOwnPropertyNames()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/preventextensions/index.html b/files/ja/web/javascript/reference/global_objects/reflect/preventextensions/index.html new file mode 100644 index 0000000000..a11bc64f93 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/preventextensions/index.html @@ -0,0 +1,96 @@ +--- +title: Reflect.preventExtensions() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions +--- +<div>{{JSRef}}</div> + +<p><span class="seoSummary">静的な <strong><code>Reflect.preventExtensions()</code></strong> メソッドは、すでにプロパティが追加されたオブジェクトに、新しいプロパティを抑制します (つまり、オブジェクトのさらなる拡張を抑制します)。</span> {{jsxref("Object.preventExtensions()")}} に似ていますが、<a href="#Difference_from_Object.preventExtensions">違いがあります</a>。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-preventextensions.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.preventExtensions(<var>target</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>拡張を抑止する対象のオブジェクト。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>{{jsxref("Boolean")}} で、対象が拡張の抑止の設定に成功したかどうかを表します。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code><var>target</var></code> が {{jsxref("Object")}} ではない場合</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.preventExtensions</code> メソッドは、すでにプロパティが追加されたオブジェクトに、新しいプロパティを抑制します (つまり、オブジェクトのさらなる拡張を抑制します)。これは {{jsxref("Object.preventExtensions()")}} と同様のメソッドです。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.preventExtensions" name="Using_Reflect.preventExtensions">Reflect.preventExtensions() の使用</h3> + +<p>{{jsxref("Object.preventExtensions()")}} も参照してください。</p> + +<pre class="brush: js notranslate">// オブジェクトは既定で拡張可能。 +let empty = {} +Reflect.isExtensible(empty) // === true + +// ...しかし、変更できる。 +Reflect.preventExtensions(empty) +Reflect.isExtensible(empty) // === false +</pre> + +<h3 id="Difference_from_Object.preventExtensions" name="Difference_from_Object.preventExtensions">Object.preventExtensions() との違い</h3> + +<p>このメソッドへの最初の引数がオブジェクトではない (プリミティブである) 場合、 {{jsxref("TypeError")}} が発生します。 {{jsxref("Object.preventExtensions()")}} では、 <code><var>target</var></code> がオブジェクトではない場合はオブジェクトに強制的に変換されます。</p> + +<pre class="brush: js notranslate">Reflect.preventExtensions(1) +// TypeError: 1 is not an object + +Object.preventExtensions(1) +// 1 +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.preventextensions', 'Reflect.preventExtensions')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.preventExtensions")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Object.isExtensible()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/set/index.html b/files/ja/web/javascript/reference/global_objects/reflect/set/index.html new file mode 100644 index 0000000000..df00e589b4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/set/index.html @@ -0,0 +1,101 @@ +--- +title: Reflect.set() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/set +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/set +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Reflect.set()</code></strong> メソッドは、オブジェクトにプロパティを設定するかのように動作します。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-set.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.set(<var>target</var>, <var>propertyKey</var>, <var>value</var>[, <var>receiver</var>]) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>プロパティを設定する対象のオブジェクト。</dd> + <dt><code><var>propertyKey</var></code></dt> + <dd>設定するプロパティ名。</dd> + <dt><code><var>value</var></code></dt> + <dd>設定する値。</dd> + <dt><code><var>receiver</var></code> {{optional_inline}}</dt> + <dd>セッターによって <code><var>target</var></code> が呼び出されたときの <code>this</code> 値を提供する。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>プロパティが成功裏に設定できたかどうかを示す {{jsxref("Boolean")}} 値。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code><var>target</var></code> が {{jsxref("Object")}} ではなかった場合。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.set</code> メソッドは、オブジェクトにプロパティを設定します。これはプロパティの割り当てを行い、機能としては <a href="/ja/docs/Web/JavaScript/Reference/Operators/Property_Accessors">プロパティアクセサー</a> 構文のようなものです。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.set" name="Using_Reflect.set">Reflect.set() の使用</h3> + +<pre class="brush: js notranslate">// オブジェクト +let obj = {} +Reflect.set(obj, 'prop', 'value') // true +obj.prop // "value" + +// 配列 +let arr = ['duck', 'duck', 'duck'] +Reflect.set(arr, 2, 'goose') // true +arr[2] // "goose" + +// 配列を切り詰められる。 +Reflect.set(arr, 'length', 1) // true +arr // ["duck"] + +// 引数が1つだけだと、プロパティキーと値は "undefined" になる。 +let obj = {} +Reflect.set(obj) // true +Reflect.getOwnPropertyDescriptor(obj, 'undefined') +// { value: undefined, writable: true, enumerable: true, configurable: true } +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.set', 'Reflect.set')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.set")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/Property_Accessors">プロパティアクセサー</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/reflect/setprototypeof/index.html b/files/ja/web/javascript/reference/global_objects/reflect/setprototypeof/index.html new file mode 100644 index 0000000000..6bf66c812d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/reflect/setprototypeof/index.html @@ -0,0 +1,90 @@ +--- +title: Reflect.setPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Method + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Reflect.setPrototypeOf()</code></strong> メソッドは、返値を除いて、 {{jsxref("Object.setPrototypeOf()")}} と同じメソッドです。これは指定されたオブジェクトのプロトタイプ (つまり、内部の <code>[[Prototype]]</code> プロパティ) にほかのオブジェクト、または {{jsxref("null")}} を設定し、操作が成功したなら <code>true</code> を、そうでないなら <code>false</code> を返します。</p> + +<div>{{EmbedInteractiveExample("pages/js/reflect-setprototypeof.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Reflect.setPrototypeOf(<var>target</var>, <var>prototype</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>target</var></code></dt> + <dd>プロトタイプを設定する対象のオブジェクトです。</dd> + <dt><code><var>prototype</var></code></dt> + <dd>オブジェクトの新しいプロトタイプ (オブジェクトまたは {{jsxref("null")}}) です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>プロトタイプが正常に設定されたかどうかを示す {{jsxref("Boolean")}} 値です。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("TypeError")}}: <code><var>target</var></code> が {{jsxref("Object")}} ではない場合、または <code>prototype</code> がオブジェクトでも {{jsxref("null")}} でもない場合。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>Reflect.setPrototypeOf</code> メソッドは、指定されたオブジェクトのプロトタイプ (つまり、内部の <code>[[Prototype]]</code> プロパティ) を変更します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Reflect.setPrototypeOf" name="Using_Reflect.setPrototypeOf">Reflect.setPrototypeOf() の使用</h3> + +<pre class="brush: js notranslate">Reflect.setPrototypeOf({}, Object.prototype) // true + +// オブジェクトの [[Prototype]] は null に変更できる。 +Reflect.setPrototypeOf({}, null) // true + +// 対象が拡張できない場合、false を返す。 +Reflect.setPrototypeOf(Object.freeze({}), null) // false + +// プロトタイプチェーンが循環する場合、false を返す。 +let target = {} +let proto = Object.create(target) +Reflect.setPrototypeOf(target, proto) // false +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-reflect.setprototypeof', 'Reflect.setPrototypeOf')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Reflect.setPrototypeOf")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Reflect")}}</li> + <li>{{jsxref("Object.setPrototypeOf()")}}</li> +</ul> |