JavaScriptオブジェクトコンストラクタ
例
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
コンストラクター関数に大文字の最初の文字で名前を付けることは良い習慣と考えられています。
オブジェクトタイプ(ブループリント)(クラス)
前の章の例は限られています。それらは単一のオブジェクトのみを作成します。
同じ「タイプ」の多くのオブジェクトを作成するために、「青写真」が必要になる場合があります。
「オブジェクト型」を作成する方法は、オブジェクトコンストラクター関数を使用することです。
上記の例でfunction Person()
は、はオブジェクトコンストラクター関数です。
new
同じタイプのオブジェクトは、次のキーワードを使用してコンストラクター関数を呼び出すことによって作成されます。
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
このキーワード_
JavaScriptでは、呼び出されるthis
のはコードを「所有する」オブジェクトです。
の値はthis
、オブジェクトで使用される場合、オブジェクト自体です。
コンストラクターでは、関数this
には値がありません。これは、新しいオブジェクトの代わりになります。this
新しいオブジェクトが作成されると、の値が新しいオブジェクトになります。
this
これは変数ではないことに注意してください。キーワードです。の値は変更できませんthis
。
オブジェクトへのプロパティの追加
既存のオブジェクトに新しいプロパティを追加するのは簡単です。
例
myFather.nationality = "English";
プロパティはmyFatherに追加されます。myMotherではありません。(他の人のオブジェクトにはなりません)。
オブジェクトへのメソッドの追加
既存のオブジェクトに新しいメソッドを追加するのは簡単です。
例
myFather.name = function () {
return this.firstName + " " + this.lastName;
};
メソッドがmyFatherに追加されます。myMotherではありません。(他の人のオブジェクトにはなりません)。
コンストラクターへのプロパティの追加
既存のオブジェクトに新しいプロパティを追加するのと同じ方法で、オブジェクトコンストラクタに新しいプロパティを追加することはできません。
例
Person.nationality = "English";
新しいプロパティをコンストラクターに追加するには、それをコンストラクター関数に追加する必要があります。
例
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
このようにして、オブジェクトのプロパティにデフォルト値を設定できます。
コンストラクターへのメソッドの追加
コンストラクター関数は、メソッドを定義することもできます。
例
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.name = function() {
return this.firstName + " " + this.lastName;
};
}
既存のオブジェクトに新しいメソッドを追加するのと同じ方法で、オブジェクトコンストラクタに新しいメソッドを追加することはできません。
オブジェクトコンストラクターへのメソッドの追加は、コンストラクター関数内で行う必要があります。
例
function Person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
changeName()関数は、nameの値を個人のlastNameプロパティに割り当てます。
今、あなたは試すことができます:
myMother.changeName("Doe");
JavaScriptは、これをmyMotherに「置き換える」ことで、あなたが話している人を認識します。
組み込みのJavaScriptコンストラクター
JavaScriptには、ネイティブオブジェクト用のコンストラクタが組み込まれています。
new String() // A new String object
new Number() // A new Number object
new Boolean() // A new Boolean object
new Object() // A new Object object
new Array() // A new Array object
new RegExp() // A new RegExp object
new Function() // A new Function object
new Date() // A new Date object
Math()
オブジェクトはリストにありません。Math
グローバルオブジェクトです。キーワードはnew
で使用できません
Math
。
知ってますか?
上記のように、JavaScriptには、プリミティブデータ型、、、およびのオブジェクトバージョンがString
ありNumber
ますBoolean
。しかし、複雑なオブジェクトを作成する理由はありません。プリミティブ値ははるかに高速です。
""
の代わりに文字列リテラルを使用しますnew String()
。
50
の代わりに数値リテラルを使用してくださいnew Number()
。
true / false
の代わりにブールリテラルを使用しnew Boolean()
ます。
{}
の代わりにオブジェクトリテラルを使用しますnew Object()
。
[]
の代わりに配列リテラルを使用してくださいnew Array()
。
/()/
の代わりにパターンリテラルを使用してくださいnew RegExp()
。
() {}
の代わりに関数式を使用してくださいnew Function()
。
例
let x1 = ""; // new primitive string
let x2 = 0; // new primitive number
let x3 = false; // new primitive boolean
const x4 = {}; // new Object object
const x5 = []; // new Array object
const x6 = /()/ // new RegExp object
const x7 = function(){}; // new function
文字列オブジェクト
通常、文字列はプリミティブとして作成されます。firstName = "John"
new
ただし、文字列は、次のキーワードを使用してオブジェクトとして作成することもできます。
firstName = new String("John")
JS Stringsの章で、文字列をオブジェクトとして作成してはならない理由を学びます 。
オブジェクトの数
通常、数値はプリミティブとして作成されます。x = 30
new
ただし、キーワードを使用してオブジェクトとして数値を作成することもできます。
x = new
Number(30)
JS番号の章で、番号をオブジェクトとして作成してはならない理由を学びます 。
ブールオブジェクト
通常、ブール値はプリミティブとして作成されます。x =
false
new
ただし、ブール値は、次のキーワードを使用してオブジェクトとして作成することもできます。
x = new Boolean(false)
JS Booleansの章で、ブール値をオブジェクトとして作成してはならない理由を学びます 。