Function函数:函数对象,任何一个函数的定义,最终都是生成了一个Function对象, Function是自省的(自己调用自己,自己创建自己)。 ----所有函数都是 Function 的实例对象
function Function(){ return 1 } 等价于 var a= new Function ( "return 1");
二.函数对象和函数体的区别
函数对象 是 无序属性 的集合,不用调用函数也会经过预编译,加载到内存中。
函数体是程序块,在调用时,由函数对象执行apply方法进行执行,执行时才会加载到内存中,执行后会弹栈
三。Function函数的原型链:由于是特殊的函数,因此具备:
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);
}