ecmascript:class
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン | |||
ecmascript:class [2025/09/09 16:22] – nullpon | ecmascript:class [2025/09/09 16:30] (現在) – nullpon | ||
---|---|---|---|
行 38: | 行 38: | ||
} | } | ||
} | } | ||
- | ``` | ||
- | |||
- | クラスの実態は関数。(JSのクラスはオブジェクト生成構文のシンタックスシュガーに過ぎない) | ||
- | |||
- | ```javascript | ||
- | console.log(typeof Test); | ||
``` | ``` | ||
行 135: | 行 129: | ||
コンストラクタ関数を通して生成されたオブジェクトは`__proto__`というプロパティを持っており、コンストラクタ関数のprototypeにアクセスできる | コンストラクタ関数を通して生成されたオブジェクトは`__proto__`というプロパティを持っており、コンストラクタ関数のprototypeにアクセスできる | ||
- | ``` | + | ```javascript |
console.log(h.__proto__.getName); | console.log(h.__proto__.getName); | ||
``` | ``` | ||
行 141: | 行 135: | ||
`h.__proto__`も`__proto__`を持っている。このようなprototypeの連鎖を**prototype chain**と呼ぶ | `h.__proto__`も`__proto__`を持っている。このようなprototypeの連鎖を**prototype chain**と呼ぶ | ||
- | ``` | + | ```javascript |
console.log(h.__proto__); | console.log(h.__proto__); | ||
console.log(h.__proto__.__proto__); | console.log(h.__proto__.__proto__); | ||
``` | ``` | ||
- | この場合は2つまでだが、クラスを継承することでprototype chainは長くなっていく。これはメソッドの呼び出しに関係している | + | 何も継承していないクラスの場合prototype chainは2つで終わりだが、継承すると継承した回数だけprototype chainは長くなる。 |
- | x.m()というコードを実行すると | + | prototype chainはメソッドの呼び出しに関係している。例えば`x.m()`というコードを実行すると次のようにメソッドが検索される |
1. `x`自身プロパティ一覧からmという名前のプロパティを探し、見つかったらメソッドとして実行する。なければ2へ | 1. `x`自身プロパティ一覧からmという名前のプロパティを探し、見つかったらメソッドとして実行する。なければ2へ |
ecmascript/class.txt · 最終更新: by nullpon