function foo() {
if (arguments.callee.self)
return arguments.callee.self;
arguments.callee.self = this;
//do sth
}
私はそれがこのように呼ばれるときを理解しています:
var a = foo();
fooが実行されると、arguments.calleeはfoo自体になります。したがって、これを未定義の変数selfに渡します。次回、別の関数がfooを呼び出すと、これが返されます。明らかにこれはうまくいくでしょう。
このように呼ばれると、物事はより巧妙になるようです:
var b = new foo();
私が思うに、jsエンジンはfooの別のインスタンスを作成し、そのコードを実行します。しかし、selfはfooの同じインスタンスのようにすでに定義されているため、この参照を返すようです。では、ここで実際に「新しい」とは何をするのでしょうか。