ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptを深く理解するシリーズ(26):デザインパターンのコンストラクターパターンを詳しく解説_JavaScriptスキル
はじめに
コンストラクターについては誰もがよく知っていますが、初心者の場合は、コンストラクターとは何かを理解する必要があります。コンストラクターは、特定の型のオブジェクトを作成するために使用されます。コンストラクターは、使用するオブジェクトを宣言するだけでなく、オブジェクトの最初の作成時にオブジェクトのメンバー値を設定するパラメーターを受け入れることもできます。独自のコンストラクターをカスタマイズし、その中でカスタム タイプ オブジェクトのプロパティまたはメソッドを宣言できます。
基本的な使い方
JavaScript では、通常、インスタンスを実装するためにコンストラクターが使用されます。JavaScript にはクラスの概念がありませんが、特別なコンストラクターが存在します。 new キーワードを使用して定義された関数を呼び出すことにより、新しいオブジェクトを作成することを JavaScript に伝えることができ、新しいオブジェクトのメンバー宣言はすべてコンストラクターで定義されます。コンストラクター内では、 this キーワードは新しく作成されたオブジェクトを参照します。基本的な使い方は以下の通りです:
var tom= new Car("Uncle", 2009, 20000);
var dudu= new Car("Dudu", 2010, 5000);
console.log(tom.output());
console.log(dudu.output());
上記の例は非常に単純なコンストラクター パターンですが、いくつか問題があります。まず、継承を使用するのは非常に面倒です。第 2 に、オブジェクトが作成されるたびに、output() が再定義されるのが最善の方法です。インスタンスの数 そうすれば、大量のメモリが節約されます。
この問題を解決するには、次の方法を使用できます:
関数 formatCar() {
this.model "Gone" this.miles "Kilometers" を返します;
}
コンストラクターとプロトタイプ
JavaScript の関数には、prototype と呼ばれるプロトタイプ属性があります。オブジェクトを作成するためにコンストラクターが呼び出されるとき、コンストラクター プロトタイプのすべての属性は、新しく作成されたオブジェクトで使用できます。これによると、複数の Car オブジェクト インスタンスは同じプロトタイプを共有できます。上記の例のコードを拡張してみましょう:
/*
注: ここでは、Object.prototype
の代わりに Object.prototype メソッド名を使用します。
主に、定義されたプロトタイプ プロトタイプ オブジェクトの書き換えを避けるために使用されます
*/
Car.prototype.output= function () {
this.model "Gone" this.miles "Kilometers" を返します;
};
var tom = new Car("Uncle", 2009, 20000);
var dudu = new Car("Dudu", 2010, 5000);
console.log(tom.output());
console.log(dudu.output());
また: コンストラクターは通常の関数と区別するために大文字で始めることをお勧めします。
新しいものしか使用できませんか?
上記の例ではすべて new を使用して関数 car のオブジェクトを作成しています。これが唯一の方法ですか?実際には他にも方法があり、2 つ挙げます:
//方法 1: 関数として呼び出す
Car("Uncle", 2009, 20000) //ウィンドウオブジェクトに追加
console.log(window.output());
//方法 2: 別のオブジェクトのスコープ内で呼び出します
var o = 新しいオブジェクト();
Car.call(o, "ドゥドゥ", 2010, 5000);
console.log(o.output());
新規強制
上記の例は new を使用しないことの問題を示していますが、コンストラクターに new キーワードを強制的に使用させる方法はありますか? 答えは「はい」です。
var dudu = Car("Dudu", 2010, 5000);
console.log(tom.output()); // 「おじさんは2万キロ歩きました」
console.log(typeof dudu); // "オブジェクト"
console.log(dudu.output()); // "ドゥドゥは5000キロ歩きました"
オリジナルラッパー関数
JavaScript には、数値、文字列、ブール値の 3 つの基本的なラッパー関数があります。 両方が使用されることもあります。
// これはおすすめです
var s = "私の文字列";
var n = 101;
var b = true;
//元の文字列
vargreet = new String("こんにちは");
// split() メソッドを使用して
を分割します
welcome.split(' ')[0] // "こんにちは"
;
// ラッパー関数の型に新しい属性を追加してもエラーは発生しません
挨拶.smile = true;
// 新しいプロパティには通常どおりアクセスできます
console.log(typeofgreet.smile) // "boolean"
;
概要
この章ではコンストラクタパターンの使い方や呼び出し方、newキーワードとの違いなどを中心に説明しますので、ご利用の際はご注意ください。
参考: http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript