call( )、apply( )

call( )和apply( )都是用于改变函数执行时的上下文,唯一最大区别在于传入参数的形式不同

这两个函数都是函数的方法,只有函数能够打点调用call()、apply(),表示用指定的上下文执行这个函数。

<script type="text/javascript">

    function fun(){
        alert(this.age);
    }

    var obj = {
        "name" : "小明",
        "age" :12
    }

    fun.call(obj);
    fun.apply(obj);

</script>    
  • call( )

call( )函数用于调用当前函数functionObject,并可同时使用指定对象thisObj作为本次执行时functionObject函数内部的this指针引用。

语法:

functionObject.call( [ thisObj [, arg1 [, arg2 [, args...]]]] )
  • apply( )

apply( )函数用于调用当前函数functionObject,并可同时使用指定对象thisObj作为本次函数执行时函数内部的this指针引用。

apply( )函数的用途和call( )函数一样,区别在于传参数,call()函数是将Function对象的参数一个个分别传入,apply()函数是将Function对象的参数以一个数组或arguments对象的形式整体传入。

 

语法:

 

functionObject.apply( [ thisObj [, argsArray ]] )

 

如果提供了argsArray参数,则该参数必须是一个数组,或者arguments对象。数组中的每个元素(arguments对象中的每个属性0...n)将按照顺序作为参数传入该函数。

如果提供了argsArray参数,则必须提供thisObj参数。

 

例子对比:

<script type="text/javascript">

    function fun(a,b,c){
        alert(a+b+c);
    }

    var obj = {
        "name" : "小明",
        "age" :12
    }

    fun.call(obj,10,11,5); //使用call函数时传入可连续传入多个参数
    fun.apply(obj,[10,15,5]);// 使用apply函数必须传入数组的形式
</script>   

apply( ) 函数妙用:

apply可以接受一个数组当做函数的“罗列”的参数。

例子:使用apply( )传入一组数组,罗列成散列的参数,可以直接输出数组中最大值

 

Math.max.apply(window,[4,342,345,234,34,56,234]);

 

posted @ 2017-10-24 10:23  沉着前进  阅读(182)  评论(0编辑  收藏  举报