この指向を深く理解する


call,applyおよびbindメソッドによって関数を間接的に呼び出すと,呼び出された関数fooのthisをこのオブジェクトobjにバインドするオブジェクトが入力される.
foo()の場合、foo()はobjによって呼び出され、彼のthisはobjを指すが、test()は自動的に実行され、objの方法として実行されず、彼のthisは依然としてwindowを指す.関数fooを宣言する際、jsはスタックにメモリ空間を開き、foo関数内部のコード(文字列の形式で)を格納し、このメモリ空間のアドレスをfooに与え、オブジェクトobj foo:foo,var bar=obj.foo;の場合、実際に値を付与するのはメモリアドレスであり、実行時にbarはメモリアドレスに基づいてスタック内の関数体コードを見つけて実行するため、このプロセスはオブジェクトobjと何の関係も生じない.
理解を容易にするためにobjは以下のように見なすことができる.