コンストラクター パターンの簡単な説明 (図を参照):
コンストラクターは継承できないため、Overriding をオーバーライドすることはできませんが、Overloading はオーバーライドできます。コンストラクターは、特定の型のオブジェクトを作成するために使用されます。オブジェクトを使用できるように準備し、オブジェクトの最初の作成時にコンストラクターがメンバーのプロパティとメソッドの値を設定するために使用できるパラメーターを受け取ります
1. オブジェクトを作成します
新しいオブジェクトを作成する 2 つの方法
var newObject={}; var newObject=new object();//object 构造器的简洁记法
2. 基本コンストラクター
JavaScript がオブジェクトとコンストラクターをサポートしていない場合は、new キーワードを使用してオブジェクトをインスタンス化します。コードは次のようになります。
function Car(model,year,miles){ this.model=model; this.year=year; this.miles=miles; this.toString=function() { return this.model+"has done"+this.miles+"miles"; }; }; //用法 //可以创建car新实例 var civic=new Car("Hona Civic",2009,2000); var mondeo=new Car("Ford Mondeo",2010,5000); console.log(civic.toString()); console.log(mondeo.toString());
3. プロトタイプを使用したコンストラクター
JavaScriptにはprototype属性があります。 JavaScript コンストラクターを呼び出してオブジェクトを作成すると、新しいオブジェクトにはコンストラクター プロトタイプのすべてのプロパティが含まれます。このようにして、複数の Car オブジェクトを作成できます (同じプロトタイプにアクセスします)
funcion() Ca(model,year,miles){ this.model=model; this.year=year; this.miles=miles; //注意使用Object.prototype.newMethod 而不是Object.prototype是为了重新定义prototype对象 Car.prototype.toString=function(){ return this.model+"Has done" +this.miles+"miles"; }; }; //用法 var civic=new Car("Honda Civic",2009,20000); var momdeo=new Car("Ford Mondeo",2010,5000); console.log(civic.toString()); console.log(mondeo.toString());
toString() の単一インスタンスをすべての Car オブジェクト間で共有できるようになりました
実際のプロジェクトにおけるコンストラクターのよくある間違いを共有しましょう
class A { public int Avar; public A() { System.out.println("AAA"); doSomething(); } public void doSomething() { Avar = 1111; System.out.println("A.doSomething()"); } } public class B extends A { public int Bvar = 2222; public B() { System.out.println("BBB"); doSomething(); System.out.println("Avar=" + Avar); } public void doSomething() { System.out.println("Bvar=" + Bvar); } public static void main(String[] args) { new B(); } }
順序は次のようになります。まず B を生成するには、まず A を生成する必要があります。そのため、A のコンストラクターを呼び出し、AAA を出力し、次に dosomething メソッドを呼び出します。 注: A のこのメソッドは B によって上書きされます。生成するものは B. のオブジェクトなので、B のメソッドを呼び出します。BVAR には現在指定された値がないため、自動的に 0 に初期化されます。
次に、B オブジェクトを生成し、最初に変数 BVAR を初期化し、次にコンストラクターを呼び出して BBB を出力し、次にメソッドを呼び出します。この時点では、BVAR は初期化されているため、出力は BVAR = 2222、変数 AVAR は in になります。オブジェクト A はオブジェクト A. のメソッド dosomething を呼び出していないため、その値は 0 であり、出力 0全体の出力は次のとおりです:
AAA
Bvar=0
BBB
Bvar=2222
アヴァル=0