接 悟透JavaScript之放下對象 -- 1
WhoAmI.call(BillGates); //直接將BillGates 作爲this,調用WhoAmI。輸出:I'm B
ill Gates of object
WhoAmI.call(SteveJobs); //直接將SteveJobs 作爲this,調用WhoAmI。輸出:I'
m Steve Jobs of object
BillGates.WhoAmI.call(SteveJobs); //將SteveJobs 作爲this,卻調用BillGates 的
WhoAmI 方法。輸出:I'm Steve Jobs of object
SteveJobs.WhoAmI.call(BillGates); //將BillGates 作爲this,卻調用SteveJobs 的
WhoAmI 方法。輸出:I'm Bill Gates of object
WhoAmI.WhoAmI = WhoAmI; //將WhoAmI 函數設置爲自身的方法。
WhoAmI.name = "WhoAmI";
WhoAmI.WhoAmI(); //此時的this 是WhoAmI 函數自己。輸出:I'm WhoA
mI of function
({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //臨時創建一個匿名對象並
設置屬性後調用WhoAmI 方法。輸出:I'm nobody of object
從上面的代碼可以看出,同一個函數可以從不同的角度來調用,this 並不一定是函數本身所屬的對象。
this 只是在任意對象和function 元素結合時的一個概念,是種結合比起一般對象語言的默認結合更加靈
活,顯得更加超然和灑脫。
在 JavaScript 函數中,你只能把this 看成當前要服務的“這個”對象。this 是一個特殊的內置參數,根據this 參數,您可以訪問到“這個”對象的屬性和方法,但卻不能給this 參數賦值。在一般對象語言中,方法體代碼中的this 可以省略的,成員默認都首先是“自己”的。但JavaScript 卻不同,由於不存在“自我”,
當訪問“這個”對象時,this 不可省略!
JavaScript 提供了傳遞this 參數的多種形式和手段,其中,象BillGates.WhoAmI()和SteveJobs.
WhoAmI()這種形式,是傳遞this 參數最正規的形式,此時的this 就是函數所屬的對象本身。而大多數
情況下,我們也幾乎很少去採用那些借花仙佛的調用形式。但只我們要明白JavaScript 的這個“自我”與其
他編程語言的“自我”是不同的,這是一個放下了的“自我”,這就是JavaScript 特有的世界觀。