Codecademyは、初心者がJavaScriptを学ぶのに最適な方法です。プログラミング言語を学ぶには練習が必要であり、Codecademyはあなたに練習をさせます。
ただし、実践の範囲を超えて理論を学ぶ必要がある場合もあります。次の答えを読んでください。JavaScriptでのプロトタイプの継承を非常によく説明しています:https ://stackoverflow.com/a/8096017/783743
これでPenguin、次のようなコンストラクターができました。
function Penguin(name) {
this.name = name;
this.numLegs = 2;
}
次に、以下Emperorを継承するコンストラクターを作成しPenguinます。
function Emperor(name) {
this.name = name;
}
Emperor.prototype = new Penguin();
Penguinのインスタンスを作成し、に割り当てていることに注意してくださいEmperor.prototype。したがって:
Emperor.prototype.name = undefinedname-これは、コンストラクターに何も渡していないためですPenguin。私が書いEmperor.prototype = new Penguin("Empy")たとしたら、Emperor.prototype.nameそうなるでしょう"Empy"。
Emperor.prototype.numLegs = 2- 明らかに。
ここで、次のように新しいものを作成するときはEmperor、コンストラクターに名前を付ける必要があります(名前として継承undefinedしていることを忘れないでくださいPenguin)。したがって:
var emp = new Emperor("Empy");
それは昔ながらの方法でした。
現在、JavaScriptプログラマーは、別のコンストラクターを使用Object.createして継承しています。call例を挙げて説明しましょう。
function Emperor(name) {
Penguin.call(this, name);
}
Emperor.prototype = Object.create(Penguin.prototype);
Emperor.prototype.constructor = Emperor;
この方法には、古い学校の方法に比べていくつかの利点があります。
Penguinusingの新しいインスタンスを作成し、それにnew Penguin()引数を渡さない代わりに、usingのプロトタイプメンバーを継承PenguinしObject.create(Penguin.prototype)ます。これにより、派生コンストラクターが実際に呼び出されるまで、基本コンストラクターの不要な初期化も防止されます。
this.name = name派生コンストラクターに再度書き込む代わりに、それを使用して基本コンストラクターを呼び出しますPenguin.call(this, name)。このようなパターンはミックスインと呼ばれ、基本コンストラクターを実行時に初期化する必要がある場合、または独自の状態情報を維持する必要がある場合に非常に役立ちます。
追加のステートメントも追加したことに注意してくださいEmperor.prototype.constructor = Emperor。これはprototype、すべての関数に存在する非常に特殊なプロパティであるためです。constructorこれは、関数自体を指す非常に特殊なプロパティを持つオブジェクトを指します。Emperor.prototype他の何かに設定すると、このプロパティが失われます。したがって、再度設定します。
これらの両方の例の正味の効果は同じです。ただし、より複雑なコードの場合は、新しいメソッドを使用することをお勧めします。JavaScriptを楽しく学んでください。