次のようにJavaScriptで標準原型継承は次のとおりです。名前空間内に標準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!");
}
は鳥のための関数定義は、鳥のプロトタイプやコンストラクタの割り当ての後に来るように持っています。名前空間内からこれをやろうとしているので、私はこれを尋ねます。可変ホイストがコードを失敗させる原因になります。例として:
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;
しかし、関数の割り当てが最初に行われるのではなく、ほとんどのリソースが元の順序を示す特定の理由があるかどうかはわかりません。
誰かが明確にしてもらえますか?
ありがとうございます!
感謝を助けるだろう!はい、それは私には意味があります。それが私が巻上げに関して言及したものです。私が疑問に思っていたのは、継承ステートメントの順序を入れ替えて、関数から変数への代入が先に来るようにするかどうかということでした(ネストスペースのコンテキスト内で動作するようにしました)。返信いただきありがとうございます! – natlee75
'namespace.Bird'がまだ定義されていないので、あなたのコードは' namespace.Bird.prototype = new namespace.Animal(); 'で失敗しています。あなたは少なくとも 'namespace.Bird = {};'を追加することができます。それはうまく動作しますが、あなたの購入の仕組みはわかりません。あなたが作業している文脈を見るのがより理にかなっています。 – mrk