关于js中 function中的length属性跟call,apply方法
关于js中 function中的length属性和call,apply方法


其实js中function自身的属性和方法还是比较多的,比如打开console它会给你一大堆的提示
这里重点只说说length属性和call和apply(important),举个例子先:
function fn1(){
console.log('fn1');
}
function fn2(a,b){
console.log(a+b);
}
function fn3(a,b,c,d){
fn2.call(this,a,b)+fn2.call(this,c,d);
}
length属性的作用:显示方法参数的期望参数个数
call和apply在参考手册中是这样说的
call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
apply方法作用跟call相同只是call方法第二个参数传进来的是参数序列,而apply传进来的是一个参数数组
引用别人的一段代码:
<input type="text" id="myText" value="input text">
<script>
function Obj(){this.value="对象!";}
var value="global 变量";
function Fun1(){alert(this.value);}
window.Fun1(); //global 变量
Fun1.call(window); //global 变量
Fun1.call(document.getElementById('myText')); //input text
Fun1.call(new Obj()); //对象!
</script>
<script>
function Obj(){this.value="对象!";}
var value="global 变量";
function Fun1(){alert(this.value);}
window.Fun1(); //global 变量
Fun1.call(window); //global 变量
Fun1.call(document.getElementById('myText')); //input text
Fun1.call(new Obj()); //对象!
</script>
我们发现apply()和call()的真正用武之地是能够扩充函数赖以运行的作用域
他在对象的继承中也表现的十分出色,如:
//父类
function sup(name,age){
this.name = name;
this.age =age;
}
//子类
function sub(name,age,friend){
sup.call(this,name,age); //继承父类属性
this.friend = frind;
}
总结:
1、每个函数都包含两个非继承而来的方法:apply()和call()。
2、他们的用途相同,都是在特定的作用域中调用函数。
3、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
2、他们的用途相同,都是在特定的作用域中调用函数。
3、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。