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 = undefined
name
-これは、コンストラクターに何も渡していないためです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;
この方法には、古い学校の方法に比べていくつかの利点があります。
Penguin
usingの新しいインスタンスを作成し、それにnew Penguin()
引数を渡さない代わりに、usingのプロトタイプメンバーを継承Penguin
しObject.create(Penguin.prototype)
ます。これにより、派生コンストラクターが実際に呼び出されるまで、基本コンストラクターの不要な初期化も防止されます。
this.name = name
派生コンストラクターに再度書き込む代わりに、それを使用して基本コンストラクターを呼び出しますPenguin.call(this, name)
。このようなパターンはミックスインと呼ばれ、基本コンストラクターを実行時に初期化する必要がある場合、または独自の状態情報を維持する必要がある場合に非常に役立ちます。
追加のステートメントも追加したことに注意してくださいEmperor.prototype.constructor = Emperor
。これはprototype
、すべての関数に存在する非常に特殊なプロパティであるためです。constructor
これは、関数自体を指す非常に特殊なプロパティを持つオブジェクトを指します。Emperor.prototype
他の何かに設定すると、このプロパティが失われます。したがって、再度設定します。
これらの両方の例の正味の効果は同じです。ただし、より複雑なコードの場合は、新しいメソッドを使用することをお勧めします。JavaScriptを楽しく学んでください。