aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasahiro FUJIMOTO <mfujimot@gmail.com>2021-08-28 21:02:57 +0900
committerGitHub <noreply@github.com>2021-08-28 21:02:57 +0900
commite2b6fc2fd48db513519e1db978dc043a01a43b58 (patch)
tree2d363f0f615680962bd3b90acf8818e1024fb2e2
parent66b9046f6909a588560eb44882cc74ab7b489d14 (diff)
downloadtranslated-content-e2b6fc2fd48db513519e1db978dc043a01a43b58.tar.gz
translated-content-e2b6fc2fd48db513519e1db978dc043a01a43b58.tar.bz2
translated-content-e2b6fc2fd48db513519e1db978dc043a01a43b58.zip
Web/JavaScript/Reference/Global_Objects/Reflect/construct を更新 (#2117)
- Markdown化 - 文書を最新の英語版に同期
-rw-r--r--files/ja/web/javascript/reference/global_objects/reflect/construct/index.html146
-rw-r--r--files/ja/web/javascript/reference/global_objects/reflect/construct/index.md148
2 files changed, 148 insertions, 146 deletions
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
deleted file mode 100644
index 9bfefa49e2..0000000000
--- a/files/ja/web/javascript/reference/global_objects/reflect/construct/index.html
+++ /dev/null
@@ -1,146 +0,0 @@
----
-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"&gt;スプレッド構文と<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>
-
-<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/construct/index.md b/files/ja/web/javascript/reference/global_objects/reflect/construct/index.md
new file mode 100644
index 0000000000..5cc425fa6d
--- /dev/null
+++ b/files/ja/web/javascript/reference/global_objects/reflect/construct/index.md
@@ -0,0 +1,148 @@
+---
+title: Reflect.construct()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/construct
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Method
+ - Reference
+ - Reflect
+ - Polyfill
+browser-compat: javascript.builtins.Reflect.construct
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct
+---
+{{JSRef}}
+
+静的な **`Reflect.construct()`** メソッドは {{jsxref("Operators/new", "new")}} 演算子のように、ただし関数として動作します。これは `new target(...args)` の呼び出しと同等です。このメソッドはオプションを追加することで、別なプロトタイプを指定することができます。
+
+{{EmbedInteractiveExample("pages/js/reflect-construct.html", "taller")}}
+
+## 構文
+
+```js
+Reflect.construct(target, argumentsList)
+Reflect.construct(target, argumentsList, newTarget)
+```
+
+### 引数
+
+- `target`
+ - : 呼び出し対象の関数。
+- `argumentsList`
+ - : 配列風オブジェクトで、 `target` の呼び出しの引数を指定する。
+- `newTarget` {{optional_inline}}
+ - : プロトタイプを使用するコンストラクター。 [`new.target`](/ja/docs/Web/JavaScript/Reference/Operators/new.target) も参照してください。 `newTarget` が存在しない場合は、既定値は `target` になります。
+
+### 返値
+
+`target` (または、もしあれば `newTarget`) の新しいインスタンスで、 `target` に `argumentsList` を渡してコンストラクターとして呼び出すことで初期化します。
+
+### 例外
+
+{{jsxref("TypeError")}}: `target` または `newTarget` がコンストラクターではない場合。
+
+## 解説
+
+`Reflect.construct()` によって、可変長引数を指定してコンストラクターを呼び出すことができます。 (これは[スプレッド構文](/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax)と[`new` 演算子](/ja/docs/Web/JavaScript/Reference/Operators/new)を組み合わせて使用することでも可能です。)
+
+```js
+let obj = new Foo(...args)
+let obj = Reflect.construct(Foo, args)
+```
+
+### `Reflect.construct()` と `Object.create()`
+
+`Reflect` が導入される前は、オブジェクトを構築するのにコンストラクターとプロトタイプの任意の組み合わせで {{jsxref("Object.create()")}} を使用して構築することができました。
+
+ function OneClass() {
+ this.name = 'one'
+ }
+
+ function OtherClass() {
+ this.name = 'other'
+ }
+
+ // Calling this:
+ let obj1 = Reflect.construct(OneClass, args, OtherClass)
+
+ // ...has the same result as this:
+ let 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
+
+ //Another example to demonstrate below:
+
+ function func1(a, b, c, d) {
+ console.log(arguments[3]);
+ }
+
+ function func2(d, e, f, g) {
+ console.log(arguments[3]);
+ }
+
+ let obj1 = Reflect.construct(func1, ['I', 'Love', 'my', 'India'])
+ obj1
+
+この 2 つの手法の最終結果は同じですが、その過程に重要な違いがあります。 `Object.create()` と {{jsxref("Function.prototype.apply()")}} を使用する場合、 `new.target` 演算子はコンストラクター内で `undefined` を返します。これは、 `new` 演算子を用いないためです。
+
+一方、 `Reflect.construct()` を呼び出す場合は、 `new.target` 演算子は、提供されていれば `newTarget` を指し、そうでなければ `target` を指します。
+
+```js
+function OneClass() {
+ console.log('OneClass')
+ console.log(new.target)
+}
+function OtherClass() {
+ console.log('OtherClass')
+ console.log(new.target)
+}
+
+let obj1 = Reflect.construct(OneClass, args)
+// Output:
+// OneClass
+// function OneClass { ... }
+
+let obj2 = Reflect.construct(OneClass, args, OtherClass)
+// Output:
+// OneClass
+// function OtherClass { ... }
+
+let obj3 = Object.create(OtherClass.prototype);
+OneClass.apply(obj3, args)
+// Output:
+// OneClass
+// undefined
+```
+
+## 例
+
+### `Reflect.construct()` の使用
+
+```js
+let d = Reflect.construct(Date, [1776, 6, 4])
+d instanceof Date // true
+d.getFullYear() // 1776
+```
+
+## 仕様書
+
+{{Specifications}}
+
+## ブラウザーの互換性
+
+{{Compat}}
+
+## 関連情報
+
+- `Reflect.construct` のポリフィルが [`core-js`](https://github.com/zloirock/core-js#ecmascript-reflect) にあります
+- {{jsxref("Reflect")}}
+- {{jsxref("Operators/new", "new")}}
+- [`new.target`](/ja/docs/Web/JavaScript/Reference/Operators/new.target)