📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の1版が非表示) | |||
| 169行目: | 169行目: | ||
<br> | <br> | ||
# オブジェクト自身のプロパティを探索する。 | # オブジェクト自身のプロパティを探索する。 | ||
# 見つからない場合、<code>[[Prototype]]</code> (プロトタイプ) のプロパティを探索する。 | # 見つからない場合、<code><nowiki>[[Prototype]]</nowiki></code> (プロトタイプ) のプロパティを探索する。 | ||
# 見つからない場合、プロトタイプのプロトタイプを探索する。 | # 見つからない場合、プロトタイプのプロトタイプを探索する。 | ||
# <code>null</code> に到達しても見つからない場合、<u>undefined</u> を返す。 | # <code>null</code> に到達しても見つからない場合、<u>undefined</u> を返す。 | ||
| 203行目: | 203行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== classとプロトタイプの関係 ==== | ==== classとプロトタイプの関係 ==== | ||
<code>class</code> 構文はシンタックスシュガーであり、内部的にはプロトタイプベースの継承を使用している。<br> | <code>class</code> 構文はシンタックスシュガーであり、内部的にはプロトタイプベースの継承を使用している。<br> | ||
| 250行目: | 251行目: | ||
! class構文 !! プロトタイプベースの等価コード !! 説明 | ! class構文 !! プロトタイプベースの等価コード !! 説明 | ||
|- | |- | ||
| | | class Animal {} || function Animal() {} || クラス宣言はコンストラクタ関数に対応する。 | ||
|- | |- | ||
| | | constructor(name) { this.name = name; } || function Animal(name) { this.name = name; } || コンストラクタ本体はそのまま関数本体になる。 | ||
|- | |- | ||
| | | speak() { ... } || Animal.prototype.speak = function() { ... }; || インスタンスメソッドは <u>prototype</u> に追加される。 | ||
|- | |- | ||
| | | static create() { ... } || Animal.create = function() { ... }; || 静的メソッドはコンストラクタ関数自体のプロパティになる。 | ||
|- | |- | ||
| | | class Dog extends Animal || Object.setPrototypeOf(Dog.prototype, Animal.prototype); || <u>extends</u> はプロトタイプチェーンを設定する。 | ||
|- | |- | ||
| | | super(name) || Animal.call(this, name); || <u>super()</u> は親コンストラクタを <u>this</u> に対して呼び出す。 | ||
|- | |- | ||
| | | super.speak() || Animal.prototype.speak.call(this); || <u>super.method()</u> は親の <u>prototype</u> のメソッドを呼び出す。 | ||
|} | |} | ||
</center> | </center> | ||