js中的call与apply

看js权威指南里面关于call与apply方法的说明:我们可以将call()与apply()看作是某个对象的方法,通过调用方法的形式来间接调用函数。这样的解释未免使人糊涂啊。下面说一下自己的见解:其实call与apply根据字面意思就是表示函数的回调,其实用法和AS3中的call与apply相同。其中call()的第一个参数与apply()的第一个参数一样都表示要调用的函数的母对象,他是调用的上下文,在函数体内通过使用this来获得对他的引用。call()剩下的参数就是要传给调用的函数的参数列表。apply()除第一个参数外的另外一个参数就是要传给调用函数的参数了,只不过他是一个数组的形式,和call()的参数列表的形式不同罢了。

要想以对象ob的方法来调用函数fu(),可以这样使用call与apply.

fu.call(ob);
fu.apply(ob);

在严格模式下call与apply的第一个参数都会变为this的值。哪怕传入的实参是原始值或是null,undefined。在非严格模式下传入的null与undefined都会被全局对象代替,而原始值都被相应的包装对象替代。

实例一:

var func=new function(){this.a="func"}
        var myfunc=function(x){
            var a="myfunc";
            var b = "bbbbb";
            alert(this.b);
            alert(this.a);
            alert(x);
        }
        myfunc.call(func,"var");*/
        /*var nu = Math.max.apply(Math,[1,3,4,6,7]);
        alert(nu);

实例二:

var nu = Math.max.apply(Math,[1,3,4,6,7]);
 alert(nu);

实例三:

 function add(a, b)
        {
            alert(a + b);
        }
        function sub(a, b)
        {
            alert(a - b);
        }
        add.call(sub, 3, 1);

运行看看结果是怎样的,你就会理解。

http://www.cnblogs.com/huyong/p/4139875.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。