javascript中的apply、call

apply、call

在javascript中,apply、call都是为了改变某个函数的运行上下文而存在的,换句话说,也就是为了改变函数体内this的指向。
首先看一个例子

function fruits() {}
 
fruits.prototype = {
    color: "red",
    say: function() {
        console.log("My color is " + this.color);
    }
}
 
var apple = new fruits;
apple.say();             //My color is red

假如我们又有一个对象banana:{ color:"yellow"},我们不想对他重新定义say()方法,这时我们就可以引用apply或者call。

banana={
  color:"yellow"
}
apple.say.call(banana);    //My color is yellow
apple.say.apply(banana);   //My color is yellow

由以上代码可以看出,原本不具有say方法的banana由于使用了apply、call方法后,改变了this的指向。

apply、call的区别

从作用上看,两者作用完全一样,都是为了改变函数体内this的指向,唯一的区别就是两者传递的参数不同,下面是一个函数的定义,

var func = function(arg1,arg2){
    
}

你可以通过如下的方法来调用

func.call(this,arg1,arg2);
func.apply(this,[arg1,arg2]);

其中,this指的是你要指定的上下文,call和apply的区别就是call是把参数按顺序传进去,apply则传入的是一个参数数组,有时候也可以直接传入arguments对象。
接下来介绍一下call和apply的用法示例,以便更近一步的了解

  • 数组的追加
var array1 = [12 , "foo" , {name:"Joe"} , -2458]; 
var array2 = ["Doe" , 555 , 100]; 
Array.prototype.push.apply(array1, array2);  //输出array1的值为[12,"foo",{name:"Joe"},-2458,"Doe",555,100]
  • 获取数组中的最大值或最小值
var array = [-1245,96,788,35];
Math.max.apply(Math,array);     //结果为788

本来number没有求解最大值最小值的方法,但Math有,通过apply将Math.max()方法应用到数组上,大大为我们提供了方便。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容