欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js中的call()和apply()方法

程序员文章站 2024-02-28 21:05:37
...

参考:js中的call()和apply()方法
call、apply、bind方法详解

call()和apply()作用一样,接收参数的方法不太一样

一、call()和apply()方法定义

语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]),apply([thisObj[,argArray]])
应用某一对象的一个方法,用另一个对象替换当前对象。
示例:

    function Animal(){    
        this.name = "Animal";    
        this.showName = function(){    
            alert(this.name);    
        }    
    }    
    function Cat(){    
        this.name = "Cat";    
    }    
    var animal = new Animal();    
    var cat = new Cat();    
    //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。    
    //输入结果为"Cat"    
    animal.showName.call(cat,",");    
    //animal.showName.apply(cat,[]);  
可以看成:cat继承了animal的showName方法并调用执行

二、call()和apple()异同

同:第一个参数都是函数运行的作用域(this)
异:call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组或类数组(如arguments 还有 callee,caller…)

三、原理

call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。
上述实例中,即把animal的this指向cat。