English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
前の章で、JavaScriptでオブジェクトを作成する方法を学びました。
前の数章の例は限られています。それらは単一のオブジェクトを作成するだけです。
時々、多くの同じタイプのオブジェクト(例)を作成するために「モデル」が必要になることがあります。
「モデル」を作成する方法は、使用することです}}オブジェクトのコンストラクタ。
一つのオブジェクトのコンストラクタ同じ属性とメソッドを持つ複数のオブジェクト(例)を作成することは非常に簡単です。
以下の例では、function User()はオブジェクトコンストラクタです:
function User(fname, lname, age, loc) { this.firstName = fname; this.lastName = lname; this.age = age; this.location = loc; }
同じタイプのオブジェクトを作成するために、newキーワードを使用してコンストラクタを呼び出します:
var Seagull = new User("Seagull", "Anna", 22, "New Delhi"); var tarush = new User("Tarush", "Balodhi", 34, "Bihar");テストをしてみる‹/›
ご覧の通り、異なるパラメータを使用してUserコンストラクタを呼び出すことで、多くの異なるユーザーオブジェクトを迅速に構築できます。これはJavaScriptが内蔵のコンストラクタ(例えばArray()やDate())で使用するパターンと完全に同じです。
JavaScriptには特別なキーワードthisがあります。それはメソッド内で現在のオブジェクトを参照するために使用できます。
オブジェクト内でthisを使用するとき、その値はオブジェクト自身です。
コンストラクタ内のthisには値がありません。それは新しいオブジェクトを代弁します。新しいオブジェクトを作成するとき、thisの値は新しいオブジェクトになります。
オブジェクトに新しい属性を追加するために、新しい値を属性に割り当てるために代入演算子(=)を使用できます。
Seagull.weapon = "Sword";テストをしてみる‹/›
注意:この属性はSeagullに追加されます。不要です。(他のUserオブジェクトには適用されません)。
オブジェクトに新しいメソッドを追加するために、新しい関数を属性に割り当てるために代入演算子(=)を使用できます。
Seagull.greet = function() { return "Hello World"; };テストをしてみる‹/›
注意:このメソッドはSeagullに追加されます。(他のUserオブジェクトには指し示しません)。
既存のオブジェクトに新しい属性を追加するように、コンストラクタに新しい属性を追加することはできません:
User.weapon = "Sword";テストをしてみる‹/›
コンストラクタに新しい属性を追加するには、それをコンストラクタに追加する必要があります:
function User(fname, lname, age, loc) { this.firstName = fname; this.lastName = lname; this.age = age; this.location = loc; this.weapon = "Sword"; }テストをしてみる‹/›
時には、後で新しい属性をコンストラクタに追加したい場合があります。そのコンストラクタはすべてのオブジェクト(例)間で共有されます。答えはオブジェクトのプロトタイプ。
コンストラクタもメソッドを定義できます。
私たち以下のように既存のオブジェクトに新しいメソッドを追加するように、コンストラクタに新しいメソッドを追加します。
オブジェクトにメソッドを追加するには、コンストラクタ内で完了する必要があります。
function User(fname, lname, age, loc) { this.firstName = fname; this.lastName = lname; this.age = age; this.location = loc; this.fullName = function() { return this.firstName + " " + this.lastName; }; }テストをしてみる‹/›
後で構築関数に新しいメソッドを追加したい場合があります。これにより、すべてのオブジェクト(例えば)間で共有されるメソッドが追加されます。答えはオブジェクトのプロトタイプ。
JavaScriptには以下のネイティブオブジェクトの構築関数があります:
let x1 =new String(); //新しいStringオブジェクト。 let x2 =new Number(); //新しいnumberオブジェクト。 let x3 =new Boolean(); //新しい布尔オブジェクト。 let x4 =new Object(); //新しいObjectオブジェクト。 let x5 =new Array(); //新しいArrayオブジェクト。 let x6 =new RegExp(); //新しいRegExpオブジェクト。 let x7 =new Date(); //新しいDateオブジェクト。 let x8 =new Function(); //新しい関数オブジェクト。テストをしてみる‹/›
上で見ることができますように、JavaScriptには基本データ型のオブジェクトとしてString、Number、Booleanがあります。
私たちは複雑なオブジェクトを作成する理由がありません。なぜなら原始値ははるかに速いからです。
常に数字、文字列、またはブール値を原始値として見なして、オブジェクトとして見なさないでください。
これらのタイプをオブジェクトとして宣言すると、実行速度が低下し、予期せぬ結果が発生します。
var str1 ="New Delhi"; var str2 =new String("New Delhi"); document.write(str1 ===str2); // エラーを返します、なぜならstr1とstr2異なるタイプを持つテストをしてみる‹/›
オブジェクトを比較できません:
var str1 =new String("New Delhi"); var str2 =new String("New Delhi"); document.write(str1 ==str2); // エラーを返します、なぜならstr1とstr2異なるタイプを持つ document.write(str1 ===str2); // rはエラーを返します、なぜならstr1とstr2異なるタイプを持つテストをしてみる‹/›
以下のようにすることもできます:
new Object()を{}で置き換え
new String()を''で置き換え
new Number()を0で置き換え
new Boolean()をfalseで置き換え
new Array()を[]で置き換え
使用/()/new RegExp()を置き換え
function (){}を使用してnew Function()を置き換え
let x1 ={}; let x2 = ""; let x3 = 0; let x4 = false; let x5 = []; let x6 = /()/; let x7 = function(){};テストをしてみる‹/›
通常、JavaScriptの文字列はリテラルで作成される原始値です:var city = "New Delhi";。
しかし、文字列をオブジェクトとして定義するために new キーワードを使用することもできます:var city = new String("New Delhi");。
“ JS 文字列 ”この章で、文字列をオブジェクトとして作成しないべき理由を学びます。
通常、JavaScriptの数字はリテラルで作成される原始値です:var num = 50;。
しかし、数字をオブジェクトとして定義するために new キーワードを使用することもできます:var num = new Number(50);。
“ JS ナンバー ”この章で、数字をオブジェクトとして作成しないべき理由を学びます。
通常、JavaScriptのブール値はリテラルで作成される原始値です:var x = false;。
しかし、ブール値をオブジェクトとして定義するために new キーワードを使用することもできます:var x = new Boolean(false);。
“ JS ブール値 ”この章で、ブール値をオブジェクトとして作成しないべき理由を学びます。