機能:プロトタイプ
各コンストラクターには、プロトタイプと呼ばれるプロパティがあります(プロトタイプ、以下に翻訳されなくなり、元のテキストを使用します)。このプロパティは非常に便利です。特定のクラスの一般的な変数または関数を宣言します。
プロトタイプの定義
すべてのコンストラクターに存在するため、プロトタイププロパティを明示的に宣言する必要はありません。次の例をご覧ください。
例PT1
コードコピーは次のとおりです。
function test()
{
}
アラート(test.prototype); //出力「オブジェクト」
プロトタイプにプロパティを追加します
上記のように、プロトタイプはオブジェクトであるため、プロパティを追加できます。プロトタイプに追加する属性は、このコンストラクターを使用して作成されたオブジェクトの共通属性になります。
たとえば、私は下にデータ型の魚を持っています、そして、私はすべての魚にこれらの特性を持っていることを望みます:livesin = "water"とfrice = 20;これを達成するために、これらの特性をコンストラクターフィッシュのプロトタイプに追加できます。
例PT2
コードコピーは次のとおりです。
機能魚(名前、色)
{
this.name = name;
this.color = color;
}
fish.prototype.livesin = "water";
fish.prototype.price = 20;
次に、いくつかの魚を作りましょう:
コードコピーは次のとおりです。
var fish1 = new Fish( "Mackarel"、 "Grey");
var fish2 = new Fish( "Goldfish"、 "Orange");
var fish3 = new Fish( "Salmon"、 "White");
どの特性が魚であるかを見てみましょう:
コードコピーは次のとおりです。
for(int i = 1; i <= 3; i ++)
{
var fish = eval_r( "fish"+i); //この魚へのポインターを取得します
alert(fish.name+"、"+fish.color+"、"+fish.livesin+"、"+fish.price);
}
出力は次のとおりです。
コードコピーは次のとおりです。
「マッカレル、灰色、水、20」
「金魚、オレンジ、水、20」
「サーモン、白水、20」
あなたは、すべての魚には存在感と価格があることがわかり、私たちは異なる魚ごとにこれらの属性を具体的に宣言しません。この時点で、オブジェクトが作成されると、コンストラクターはその属性プロトタイプを新しいオブジェクトの内部属性__Proto__に割り当てます。この__Proto__は、このオブジェクトによってそのプロパティを見つけるために使用されます。
プロトタイプを使用して、すべてのオブジェクトに共通の関数を追加することもできます。これには1つの利点があります。オブジェクトを作成するたびに、この関数を作成および初期化する必要はありません。これを説明するには、DT9の例をもう一度見て、プロトタイプを使用して書き直しましょう。
プロトタイプを使用して、オブジェクトに関数を追加します
例PT3
コードコピーは次のとおりです。
関数従業員(名前、給与)
{
this.name = name;
this.salary = salary;
}
employee.prototype.getSalary = function getSalaryFunction()
{
this.salaryを返します。
}
employee.prototype.addsalary = function addsalaryfunction(添加)
{
this.Salary = this.Salary+Addition;
}
通常どおりオブジェクトを作成できます。
コードコピーは次のとおりです。
var boss1 = new Employee( "Joan"、200000);
var boss2 = new Employee( "Kim"、100000);
var boss3 = new Employee( "sam"、150000);
そしてそれを確認してください:
コードコピーは次のとおりです。
alert(boss1.getSalary()); //出力200000
alert(boss2.getSalary()); //出力100000
alert(boss3.getSalary()); //出力150000
プロトタイプの仕組みを説明するための図を以下に示します。このオブジェクトの各インスタンス(BOSS1、BOSS2、BOSS3)には、__Proto__と呼ばれる内部プロパティがあり、コンストラクター(従業員)のプロパティプロトタイプを指します。 GetSalaryまたはAddSalaryを実行すると、このオブジェクトはこのコードを__Proto__で見つけて実行します。これに注意してください:ここにコードのコピーはありません(DT8チャートの例と比較してください)。