JavaScript の標準的なプロトタイプの継承は次のとおりです。
function Animal() {
this.legs = 0;
}
Animal.prototype.move = function () {
alert("I'm moving!");
}
Bird.prototype = new Animal();
Bird.prototype.constructor = Bird;
function Bird() {
this.legs = 2;
this.wings = 2;
}
Bird.prototype.move = function () {
alert("I'm flying!");
}
Bird の関数定義は、Bird のプロトタイプとコンストラクターの割り当ての後に来る必要がありますか。名前空間内からこれを実行しようとしており、変数の巻き上げがコードの失敗を引き起こしているため、これを尋ねます。例として:
var namespace = {};
namespace.Animal = function () {
this.legs = 0;
};
namespace.Animal.prototype.move = function () {
alert("I'm moving!");
};
namespace.Bird.prototype = new namespace.Animal();
namespace.Bird.prototype.constructor = namespace.Bird;
namespace.Bird = function () {
this.legs = 2;
this.wings = 2;
};
namespace.Bird.prototype.move = function () {
alert("I'm flying!");
};
namespace.Bird.prototype 代入文を巻き上げたおかげで、namespace.Bird.prototype.constructor 代入文は失敗しました。ただし、次のコード ブロックに示すように、namespace.Bird 関数の割り当てをこれら 2 行の上に移動すると、コードは機能するように見えます。
namespace.Bird = function () {
this.legs = 2;
this.wings = 2;
};
namespace.Bird.prototype = new namespace.Animal();
namespace.Bird.prototype.constructor = namespace.Bird;
ただし、ほとんどのリソースが関数の割り当てを最初にするのではなく、元の順序で表示する特定の理由があるかどうかはわかりません。
誰かが明確にしてもらえますか?
ありがとう!