JavaScript パターン
はじめに
JavaScript はオブジェクト指向
オブジェクト= key-value ペアのリスト
オブジェクトの種類
- ネイティブオブジェクト
- 組み込みオブジェクト(Array,Date など)
- ユーザ定義オブジェクト(const a = ;)
- ホストオブジェクト(window など)
リテラルとコンストラクタ
オブジェクトリテラル記法
a = {};
ちなみに、いわゆる「空のオブジェクト」とは、Object.prototype から継承したプロパティ・メソッドのみを持つオブジェクトのこと
組み込みコンストラクタ関数
使うな。リテラル記法を使え。
const obj = new Object();
カスタムコンストラクタ関数
new
を使うと実際には下記のような処理が行われる
const Person = function (name) {
// 暗黙的にオブジェクトを作成
// const this = Object.create(Person.prototype);
this.name = name;
// 暗黙的にオブジェクトを返す
// return this;
};
Person.prototype.say = function () {
return 'I am ' + this.name;
};
コンストラクタ内で明示的にオブジェクトをreturn
する事もできる。
この場合、プロトタイプの継承は手動で行う必要がある。
また、暗黙的に作成されたオブジェクトは破棄される。
const Person = function (name) {
return { name: 'john' }; // Person.prototypeは継承されない
};
new を忘れたときのための保険
const Person = function () {
if (!(this instanceof Person)) {
return new Person();
}
// ...something...
};
配列リテラル
配列リテラルを使え。配列コンストラクタは使うな。