3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

javascript goodparts 第5章まとめ

Posted at

クラスを用いる言語(java)における継承のメリット
・コード再利用の仕組み
新しく作るクラスが既存のものとほぼ同じなら、差分だけを定義すればよい
・型システムの仕様を含んでいる
→明示的にキャストを行う必要性から解消される

js
キャストは存在しない
オブジェクトの継承関係も重要でない

「重要なのは何を継承しているかでなく、何ができるか」

jsはプロトタイプ型の言語
→ オブジェクトが他のオブジェクトから直接継承される

5.1 疑似クラス型
jsプロトタイプ クラス型をまねたいくつかの構文をまねしたため、かえってわかりづらくなっている

あるオブジェクトからほかのオブジェクトへ直接継承を行う代わりに、オブジェクトがコンストラクタ関数によって生成する不必要なステップがある

関数オブジェクト生成時
・関数オブジェクト生成するFunctionコンストラクタ 内部的に↓を実行
this.prototype = {constructor: this};

コンストラクタであるかにかかわらず、すべての関数はプロトタイプオブジェクトを保持する
→なぜならこの言語には、どの関数がコンストラクタとして使われるためのものなのか区別する方法がない

constructorプロパテぃは役に立たない。重要なのはprototypeオブジェクト

コンストラクタ関数を使う際二生じる危険
コンストラクタ関数を呼び出す際にnewをわすれると、thisには新しいオブジェクトがせっとされなくなる

かわりにthisにはグローバルオブジェクトがせっとされてしまい、しかも警告が出ない
この問題を緩和するため
・すべてのコンストラクタ関数は先頭を大文字にそれ以外のものは先頭をおおもじにしない

・もっといい方法は、newをいっさい使わない

jsの継承方法で、もっといい選択肢がある

5.2オブジェクト指定子
コンストラクタが受け取るパラメータが多くなってしまうことがある
引数の順番を覚えるのが大変

パラメータの数が増えそうなときには、コンストラクタがオブジェクト指定子を受け取るように設計する方がわかりやすい

オブジェクト指定子 = オブジェクトを生成するにあたっての設定が格納されたオブジェクト

var mObjec = maker(f, l , m, c, s);

⬆のかわりに
var myObject = maker({
first: f,
last: l,
middle: m,
state: s,
city: c
});
とする
・引数の指定の順序をきにしなくてよい
・コンストラクタがデフォルト値をよういしていれば引数省略できる
・コード可読性があがる

JSONを利用している場合にはさらにメリットがある

5.3プロトタイプ型

5.4 関数型
いままでの継承パターンの持つ弱点 
プライバシーがない

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?