apply,call,bind

apply()方法:

Function.apply(obj,args)

obj:这个对象将代替Function类里this对象

args:这个是数组,它将作为参数传给Function(args-->arguments)

call()方法:

Function.call(obj,[param1[,param2[,…[,paramN]]]])

obj:这个对象将代替Function类里this对象

params:这个是一个参数列表

相同点与不同点

相同点:call和apply的作用都是改变函数体内部 this 的指向,也就是把Function(即this)绑定到obj,这时候obj具备了Function的属性和方法,说白一点就是obj继承了Function的属性和方法。

不同点: 接受参数的方式不太一样,apply接受的是数组参数,call接受的是连续参数。

demo1:

functionmul(a,b){returnthis+(a*b);}

console.log(mul.call(3,2,1));

console.log(mul.apply(2,[2,1]));     //this指向第一个参数

demo2:利用apply找出数组最大值:

var a = [2,4,6,7]

console.log(Math.max.apply(null,a))

demo3:数组追加:

var array1=[ 1,2,3 ]

var array2=[ 4,5,6 ]

Array.prototype.push.apply(array1, array2)     //array1=[ 1,2,3,4,5,6 ]


bind:也是可以改变函数体内 this 的指向。
当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。(在Javascript中,多次 bind() 是无效的。)

var bar =function(){console.log(this.x);}

var foo = { x:3 }

bar();   // undefined

var  func = bar.bind(foo);

func();  // 3

bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

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

相关阅读更多精彩内容

友情链接更多精彩内容