Function
在ecamscript規(guī)范中。函數(shù)都是一個Function類型的對象,
而普通函數(shù),和類定義的普通方法,以及類靜態(tài)方法都有不同的地方。
相同點:
他們都是Function類的對象。
不同點:
在作函數(shù)綁定上,(函數(shù)綁定:就是將函數(shù)賦值給另一個函數(shù),或者利用call或apply方法將函數(shù)綁定到別的對象上調(diào)用)
如果是類的普通函數(shù)綁定到別的對象上去,那么函數(shù)中的this,指的就是該類的實例,無論你是用call方式,還是將函數(shù)賦值給另一個對象,this始終指的就是先前函數(shù)所在的那個類的實例對象,而如果是一個普通函數(shù),this指的就是當(dāng)前綁定到的那個關(guān)聯(lián)對象。
給對象動態(tài)創(chuàng)建的方法和普通函數(shù)一樣,因為該方法其實就是將一個匿名的普通函數(shù)賦給對象的方法變量的,如:obj.fun=function(str){alert(str)} 。
綁定方式:比如obj.fun.call(obj2) 這個方式就是將fun函數(shù)綁定到obj2上執(zhí)行
第二種方式: obj2.funName= obj.fun; obj2.funName();
為什么說第二種方式也是一種綁定,寫個例子證明一下:
如果obj.fun()等價于obj.fun.call(obj);
如果:obj2.funName= obj.fun; //因為函數(shù)是Function類型的對象,那么obj2.funName和 obj.fun一樣都是引用同一個對象。
那么obj2.funName()也可等價于obj.fun.call(obj2);
說明一下:類的靜態(tài)函數(shù)是定義類的時候就存在了它的Function對象,而類的普通函數(shù)則是在類 實例化的時候才生成對應(yīng)的函數(shù)的Function對象
關(guān)于call方法,詳見Function的call方法.api文檔。
函數(shù)綁定:其實就是指,將一個函數(shù)臨時的賦給某個對象,該對象就臨時的擁有了這個函數(shù),但實際上對象上是沒有這個函數(shù)定義的