6時だョ!!全員集合!!

Rails・JavaScrictを中心にアウトプットします。

2022年1月3日 JavaScript (JS Primer) クラス

クラス

クラスの前提・・・動作状態を定義した構造

  • クラスからはインスタンスと呼ばれるオブジェクトを作成でき、インスタンスはクラスに定義した動作を継承し、状態は動作によって変化します。

class構文

  • ES2015でクラスを表現するためのclass構文が導入されました
  • class構文で定義したクラスは関数オブジェクトの一種です。
  • class構文はクラスを作るための関数定義や継承をパターン化した書き方です。

関数の定義方法として関数宣言文と関数式があるように、クラスにもクラス宣言文とクラス式があります。 このように関数とクラスは似ている部分が多いです。

クラスの定義

クラスの定義方法にはクラス宣言文とクラス式があります。

クラス宣言文ではclassキーワードを使い、class クラス名{ }のようにクラスの構造を定義できます。

クラスは必ずコンストラクタを持ち、constructorという名前のメソッドとして定義します。

そのクラスからインスタンスを作成する際にインスタンスに関する状態の初期化を行うメソッドです。 

constructorメソッドに定義した処理は、クラスをインスタンス化したときに自動的に呼び出されます。

クラス宣言文

class MyClass {
    constructor() {
    }
}

コンストラクタの処理が不要な場合は省略出来ます。

クラス式

関数式のように値として定義する方法です。

const MyClass = class MyClass {
    constructor() {}
};

const AnonymousClass = class {
    constructor() {}
};

匿名関数のようにクラス名を省略することも出来ます。

復習

callメソッド

  • 返値はthis の値と引数を指定して関数を呼び出した結果です。
  • call() はあるオブジェクトに所属する関数やメソッドを、別なオブジェクトに割り当てて呼び出すことができます。
  • call() は引数にthisの値を指定することができます。
  • call()にプリミティブ型を渡すとラッパーオブジェクトが渡されたものとして処理されます。

call() は関数やメソッドに this の新しい値を提供します。
call() によって、いったんメソッドを書いてから、新しいオブジェクトへメソッドを書き直さずに他のオブジェクトへと継承することができます。

toString() を使用したオブジェクトクラスの判別にも使用することができます。

  • toString() メソッドは、オブジェクトを表す文字列を返します。
const toString = Object.prototype.toString;

toString.call(new Date);    // [object Date]
toString.call(new String);  // [object String]
toString.call(Math);        // [object Math]

すべてのオブジェクトで Object.prototype.toString() を使うためには、 Function.prototype.call() または Function.prototype.apply() を、第1引数 (thisArg) に調べたいオブジェクトを渡して呼び出す必要があります。

callメソッドの用途

  • thisの値を指定したいとき
  • オブジェクトがどのオブジェクトに所属するか知りたいとき(プリミティブ型でもラッパーオブジェクトとして渡されるのでオブジェクトの型がわかります)

参考

JS primer クラス