をまとめてみた。
this がグローバルコードにある
Global オブジェクト。
- 例
-
a = 0; this.a;//0
this が関数コードにある
関数が単体で呼び出された
Global オブジェクト。
- 例
-
function func(){ return this; }; a = 1; func().a;//1
関数がオブジェクトから呼び出された
呼び出したオブジェクト。
- 例
-
var object = {}; object.func = function(){ return this; }; object.func() == object;//true
関数が Function::prototype::apply や Function::prototype::call によって呼び出された
apply や call の第1引数が null または undefined
Global オブジェクト。
- 例
-
function func(){ return this; }; a = 2; func.call(null).a;//2
apply や call の第1引数が null でも undefined でもない
第1引数がオブジェクトを指し示していたら、そのオブジェクト。そうでないなら、第1引数の表す値を Object 型に変換した結果のオブジェクト。
- 例
-
function func(){ return this; }; var object = {}; func.call(object) == object;//true
Tips
(function(){return this})() とやるとソースのどんな場所からでも Global オブジェクトが取得できる。