このような回答は、JavaScript ファイルが読み取られるときに、最初のパスで関数宣言がメモリに読み込まれ、後続のパスで式が評価されることを示しています。ただし、次の例は、関数内の関数がコードの実行後にコンパイルされることを示しています。
以下のコードを機能させるには、Child
コンストラクターをテスト関数の外に移動するnew Child()
か、関数内に残す場合は への呼び出しの前に配置する必要がありtest
ます。現在の位置ではTypeError: this.init is not a method
、コードを実行すると が得られます。
関数内の関数宣言がいつ評価されるかに関する詳細情報はどこにありますか?
document.addEventListener('DOMContentLoaded', function() {
test()
}, false)
function test() {
// Child declaration can go here
var child = new Child()
// If Child is placed here, this.init is undefined
function Child() {
this.init()
}
Child.prototype = new Ancestor(Child)
}
function Ancestor(constructor) {
this.constructor = constructor
}
Ancestor.prototype.init = function init() {
console.log(this)
}
// Child declaration can go here