ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript_javascript スキルのコンストラクター パターンの詳細な説明

JavaScript_javascript スキルのコンストラクター パターンの詳細な説明

WBOY
WBOYオリジナル
2016-05-16 15:19:541336ブラウズ

コンストラクター パターンの簡単な説明 (図を参照):

コンストラクターは継承できないため、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

注: 初期化の順序では、継承時にスーパークラス オブジェクトが最初に生成され、オブジェクトが生成されると、最初に静的変数が生成され、次に一般変数が生成され、その後コンストラクターが呼び出されます。すべてのスーパークラス オブジェクトが生成されると、このオブジェクトも同じ順序で生成されます。 メソッドがオーバーライドされると、現在のオブジェクトのメソッドが呼び出されます。これには注意が必要です。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。