jsにおけるthisの方向の理解について


JavaScriptにおけるthisの指向を理解する前に、まずは「thisの最終的な指示は常に呼び出しの対象です」という言葉を覚えておきましょう.
ケース1:関数の直接呼び出し
function hi(){
    alert(this)
}

hi()//    this    window
このコードを理解して、一般的にグローバル変数を定義します.実はwindowに属性を追加します.
         var a=1;  =>>window.a=1
上のコードは書き上げられます.   window.hi()       その真言を参考にして、この時のthisの指差はそれを使うwindowの対象です.
ケース二:オブジェクト中関数
var obj = {
    a: "hi",
    fn: function(){
        alert(this)
    }
}

obj.fn()//  this obj
この場合、比較的直感的で、真言によると、Objが呼び出す関数fnなので、関数のthisはObjを指します.
状況三:この状況は説明しにくいです.直接コードします.
var obj = {
    a: {
       fn: function(){
          alert(this)
        }
    }
}

obj.a.fn();//   this   a,   obj
このような状況は複雑に見えるが、真言とは衝突しない.関数は二つのオブジェクトがあるが、本当に関数を呼び出す対象はaである.だから、fnのthisは一級上のオブジェクト、つまり彼に一番近い対象を指す.
第三の状況に似たコードがあります.
var obj = {
    fn:function(){
        alert(this)
    }

}

window.obj.fn();
一つの道理は、thisはobjを指します.
次は前に会った面接問題です.
以下の実行結果を説明します.
function doSomething(){
    alert(this)
}

element.onclick = doSomething(); //  element 
element.onclick = function(){ doSomething()}  //  element 
doSomething()  //    
3つの場合の出力の結果はそれぞれ   elementオブジェクト、windowオブジェクト、windowオブジェクト
理由は文章の冒頭の真言で、thisの最終的な指し示しは終始呼び出されたその対象です.
先ほど出会ったテーマは、やはり参考になります.
var person = {
	fullname: function{
		console.log(this);
	},
	printAge: function(){
		console.log(this);
	}
}
person.fullname();		//this  person
var age = person.printAge;
age();					//this  window(    )
コードの中で、まずperson.printAgeの値をageに割り当てて、そしてage()を呼び出す時、window.age()は、ageを呼び出す対象はwindowで、上の真言の道理と同じに、誰が関数thisを呼び出して誰を指しますか?