5

例の関数の戻りではなく、関数に対して new が実行される理由を理解しようとしていますy =:

function returnFunction(){ return function blah(str){ this.x = str; return this;}}

y = new returnFunction()("blah")
// output: Window {x: "blah"; top: Window, window: Window, location: Location, ....}
x = new (returnFunction())("blah")
// output: blah {x: "blah"}

z = new function blah(){return this;}()
// output: blah {}

zz = new function(){return this;}() //note the missing function name
// output: Object {}

b = new function blib(str){this.x = str; return this}
// blib {x: undefined}
bb = new function blib(str){this.x = str; return this}("blah")
// blib {x: "blah"}
c = new function blib(){this.x = "blah"; return this}
// blib {x: "blah"}

したがって、 y newの場合、のコピーを作成してreturnFunctionから呼び出します

y = (new returnFunction())()

そして、無名関数を呼び出すことにより、 nothisがあるため、デフォルトで になりWindowます。

の場合はx、かっこで囲んで (関数returnFunctionを返すように呼び出されます)、新しいオブジェクトに設定された new 演算子によって呼び出されます。blahblahthis

new (returnFunction())正しい順序で実行するためにラップする必要があるのは奇妙に思えます。

誰かが私に根底にある実行を説明してもらえますか?

4

2 に答える 2