JS call()及apply()方法使用实例汇总
最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧。
每个函数都包含两个非继承而来的方法:call()方法和apply()方法。
相同点:这两个方法的作用是一样的。
都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。
call()方法使用示例:
//例1 //例2 varPet={ words:'...', speak:function(say){ console.log(say+''+this.words) } } Pet.speak('Speak');//结果:Speak... varDog={ words:'Wang' } //将this的指向改变成了Dog Pet.speak.call(Dog,'Speak');//结果:SpeakWang
apply()方法使用示例:
//例1 //例2 functionPet(words){ this.words=words; this.speak=function(){ console.log(this.words) } } functionDog(words){ //Pet.call(this,words);//结果:Wang Pet.apply(this,arguments);//结果:Wang } vardog=newDog('Wang'); dog.speak();
不同点:接收参数的方式不同。
apply()方法接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
语法:apply([thisObj[,argArray]]);,调用一个对象的一个方法,2另一个对象替换当前对象。
说明:如果argArray不是一个有效数组或不是arguments对象,那么将导致一个
TypeError,如果没有提供argArray和thisObj任何一个参数,那么Global对象将用作thisObj。
call()方法第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。
语法:call([thisObject[,arg1[,arg2[,...,argn]]]]);,应用某一对象的一个方法,用另一个对象替换当前对象。
说明:call方法可以用来代替另一个对象调用一个方法,call方法可以将一个函数的对象上下文从初始的上下文改变为thisObj指定的新对象,如果没有提供thisObj参数,那么Global对象被用于thisObj。
使用示例1:
functionadd(c,d){ returnthis.a+this.b+c+d; } vars={a:1,b:2}; console.log(add.call(s,3,4));//1+2+3+4=10 console.log(add.apply(s,[5,6]));//1+2+5+6=14
使用示例2:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。