1

次のように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; 

しかし、関数の割り当てが最初に行われるのではなく、ほとんどのリソースが元の順序を示す特定の理由があるかどうかはわかりません。

誰かが明確にしてもらえますか?

ありがとうございます!

答えて

1

理由は、解析時間の機能の利用可能性と機能のランタイムの可用性と関係があります。例えば

var afunc = asdf; 
function asdf(){} 

function asdf(){} 
var afunc = asdf; 

と同じであるが、

var afunc = asdf; 
var asdf = function(){}; 

var asdf = function(){}; 
var afunc = asdf; 
と同じではありません

それは意味が分かりますか?

また、この質問に対する答えは、おそらく、応答のためのあなた

var functionName = function() {} vs function functionName() {}

+0

感謝を助けるだろう!はい、それは私には意味があります。それが私が巻上げに関して言及したものです。私が疑問に思っていたのは、継承ステートメントの順序を入れ替えて、関数から変数への代入が先に来るようにするかどうかということでした(ネストスペースのコンテキスト内で動作するようにしました)。返信いただきありがとうございます! – natlee75

+0

'namespace.Bird'がまだ定義されていないので、あなたのコードは' namespace.Bird.prototype = new namespace.Animal(); 'で失敗しています。あなたは少なくとも 'namespace.Bird = {};'を追加することができます。それはうまく動作しますが、あなたの購入の仕組みはわかりません。あなたが作業している文脈を見るのがより理にかなっています。 – mrk

関連する問題