Function函數:函數對象,任何一個函數的定義,最終都是生成了一個Function對象, Function是自省的(本身調用本身,本身建立本身)。 ----全部函數都是 Function 的實例對象數組
function Function(){ return 1 } 等價於 var a= new Function ( "return 1");app
二.函數對象和函數體的區別函數
函數對象 是 無序屬性 的集合,不用調用函數也會通過預編譯,加載到內存中。this
函數體是程序塊,在調用時,由函數對象執行apply方法進行執行,執行時纔會加載到內存中,執行後會彈棧spa
三。Function函數的原型鏈:因爲是特殊的函數,所以具有:prototype
prototype: 指向Function的prototype對象。指針
__proto__:指向Function的prototype對象。 //Function 是自省的,由本身建立對象
因爲Function的prototype對象的原型鏈指向Object的原型對象,所以全部Function也具有Object原型對象的屬性和函數。事件
Function函數的內置屬性及函數:內存
Function的全局屬性及函數。
Function的prototype屬性及函數
四.Function函數全局屬性及函數
1. 函數的全局屬性說明: 全部函數對象都具有的屬性
length :函數聲明時的 參數 數量 ( 形參數量)
name:函數名
prototype:原型對象,每一個函數都有原型對象,在使用new
五. Function的prototype函數
函數的prototype擴展函數以下:
1.apply(this.arguments):執行函數體內容。
----this : 在函數體中的this指針。 目標函數體執行時this指針
----arguments :傳遞給函數體的參數、數組 目標函數的實際參數值 [ , ]
apply是執行目標函數體的方法,在函數調用時由JS引擎調用
應用場景:若是目標函數執行時須要修改this指針, 經過改變 apply 中傳入 this的值 改變函數中this的指向
apply在事件章節中,想要給目標響應函數傳遞參數時要用
function fun( a,b){
console.log(a+b);
}
//最簡單的調用方式
fun(20,25);
//當作構造函數執行
new fun(20,25);
//經過調用apply函數執行 this爲window對象 ---能夠經過改變 this傳入值·改變函數中this·指向
fun.apply(this ,[20,25]); //數組【】裏面包含要傳遞的值,值用逗號分開
2.call( this, paramter1 ,paramter2 ....) : 執行函數體內容。
-this : 在函數體中的 this指針。
--paramter :傳遞給函數體的參數
fun.call( this, 20,25) ----除了傳遞參數時不加 【】其他同apply相同
結果----45
3. toString() : 返回函數程序字符串。
對象函數同 函數體沒有任何關係,在對象函數的底層,封裝了當前函數函數體的字符串代碼,執行時執行這段字符串代碼便可。
alert( fun.toString() )
結果---function fun( a,b){ console.log(a+b); }