例の関数の戻りではなく、関数に対して 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 演算子によって呼び出されます。blah
blah
this
new (returnFunction())
正しい順序で実行するためにラップする必要があるのは奇妙に思えます。
誰かが私に根底にある実行を説明してもらえますか?