JavaScript オブジェクトのコンストラクタ関数

オブジェクトコンストラクタ関数

同じタイプの多くのオブジェクトを作成する必要がある場合があります。

オブジェクトタイプを作成するには、オブジェクトコンストラクタ関数を使用します。

オブジェクトコンストラクタ関数は、通常、最初の文字を大文字にして命名するのが良いとされています。

Personオブジェクトタイプ


// Personオブジェクトコンストラクタ関数の定義
function Person(first, last, age, eye) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eye;
}

注意:

コンストラクタ関数内では、thisには値がありません。

新しいオブジェクトが作成されるとき、thisの値はその新しいオブジェクトになります。

これで、new Person()を使用して多くの新しいPersonオブジェクトを作成できます:


const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
const mySister = new Person("Anna", "Rally", 18, "green");

const mySelf = new Person("Johnny", "Rally", 22, "green");

プロパティのデフォルト値

プロパティに与えられた値は、コンストラクタによって作成されたすべてのオブジェクトのデフォルト値になります:


// Personオブジェクトコンストラクタ関数の定義
function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
  this.nationality = "English";
}

オブジェクトにプロパティを追加する

作成済みのオブジェクトにプロパティを追加するのは簡単です:


myFather.nationality = "English";

注意:

新しいプロパティはmyFatherに追加されますが、他のPersonオブジェクトには追加されません。

コンストラクタにプロパティを追加する

オブジェクトコンストラクタに新しいプロパティを追加することはできません:


Person.nationality = "English";

新しいプロパティを追加するには、コンストラクタ関数のprototypeに追加する必要があります:


Person.prototype.nationality = "English";

コンストラクタ関数にメソッドを追加する

コンストラクタ関数にはメソッドを追加することもできます:


function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
  this.fullName = function() {
    return this.firstName + " " + this.lastName;
  };
}

オブジェクトにメソッドを追加する

作成済みのオブジェクトにメソッドを追加するのは簡単です:


myMother.changeName = function (name) {
  this.lastName = name;
}

注意:

新しいメソッドはmyMotherに追加されますが、他のPersonオブジェクトには追加されません。

コンストラクタにメソッドを追加する

オブジェクトコンストラクタ関数に新しいメソッドを追加することはできません。

このコードはTypeErrorを発生させます:


Person.changeName = function (name) {
  this.lastName = name;
}

myMother.changeName("Doe");
// TypeError: myMother.changeName is not a function

新しいメソッドを追加するには、コンストラクタ関数のprototypeに行う必要があります:


Person.prototype.changeName = function (name) {
  this.lastName = name;
}

myMother.changeName("Doe");

注意:

changeName()関数は名前の値をmyMotherのlastNameプロパティに割り当てます。thisはmyMotherで置換されます。

組み込みJavaScriptコンストラクタ

JavaScriptにはすべてのネイティブオブジェクトの組み込みコンストラクタがあります:


new Object()   // 新しいObjectオブジェクト
new Array()    // 新しいArrayオブジェクト
new Map()      // 新しいMapオブジェクト
new Set()      // 新しいSetオブジェクト
new Date()     // 新しいDateオブジェクト
new RegExp()   // 新しいRegExpオブジェクト
new Function() // 新しいFunctionオブジェクト

注意:

Math()オブジェクトはリストに含まれていません。Mathはグローバルオブジェクトです。Mathにはnewキーワードを使用することはできません。

知っておくと便利な情報

new Object()の代わりにオブジェクトリテラル{}を使用します。

new Array()の代わりに配列リテラル[]を使用します。

new RegExp()の代わりにパターンリテラル/()/を使用します。

new Function()の代わりに関数式() {}を使用します。


"";           // プリミティブ文字列
0;            // プリミティブ数値
false;        // プリミティブブール値

{};           // オブジェクトオブジェクト
[];           // 配列オブジェクト
/()/          // 正規表現オブジェクト
function(){}; // 関数