JavaScript函数Call、Apply原理实例解析
这篇文章主要介绍了JavaScript函数Call、Apply原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
一、方法重用
使用call()方法,您可以编写能够在不同对象上使用的方法。
1、函数是对象方法
在JavaScript中,函数是对象的方法。
如果一个函数不是JavaScript对象的方法,那么它就是全局对象的函数(参见前一章)。
下面的例子创建了带有三个属性的对象(firstName、lastName、fullName)。
varperson={ firstName:"Bill", lastName:"Gates", fullName:function(){ returnthis.firstName+""+this.lastName; } } person.fullName();//将返回"BillGates"
fullName属性是一个方法。person对象是该方法的拥有者。
fullName属性属于person对象的方法。
二、call()方法
call()方法是预定义的JavaScript方法。
它可以用来调用所有者对象作为参数的方法。
通过call(),您能够使用属于另一个对象的方法。
本例调用person的fullName方法,并用于person1:
varperson={ fullName:function(){ returnthis.firstName+""+this.lastName; } } varperson1={ firstName:"Bill", lastName:"Gates", } varperson2={ firstName:"Steve", lastName:"Jobs", } person.fullName.call(person1);//将返回"BillGates"
本例调用person的fullName方法,并用于person2:
varperson={ fullName:function(){ returnthis.firstName+""+this.lastName; } } varperson1={ firstName:"John", lastName:"Doe", } varperson2={ firstName:"Mary", lastName:"Doe", } person.fullName.call(person2);//将返回"SteveJobs"
1、带参数的call()方法
call()方法可接受参数:
varperson={ fullName:function(city,country){ returnthis.firstName+""+this.lastName+","+city+","+country; } } varperson1={ firstName:"Bill", lastName:"Gates" } person.fullName.call(person1,"Seattle","USA");
三、apply()方法
apply()方法与call()方法非常相似:
在本例中,person的fullName方法被应用到person1:
varperson={ fullName:function(){ returnthis.firstName+""+this.lastName; } } varperson1={ firstName:"Bill", lastName:"Gates", } person.fullName.apply(person1);//将返回"BillGates"
1、call()和apply()之间的区别
不同之处是:
call()方法分别接受参数。
apply()方法接受数组形式的参数。
如果要使用数组而不是参数列表,则apply()方法非常方便。
2、带参数的apply()方法
apply()方法接受数组中的参数:
varperson={ fullName:function(city,country){ returnthis.firstName+""+this.lastName+","+city+","+country; } } varperson1={ firstName:"John", lastName:"Doe" } person.fullName.apply(person1,["Oslo","Norway"]);
与call()方法对比:
varperson={ fullName:function(city,country){ returnthis.firstName+""+this.lastName+","+city+","+country; } } varperson1={ firstName:"John", lastName:"Doe" } person.fullName.call(person1,"Oslo","Norway");
3、在数组上模拟max方法
您可以使用Math.max()方法找到(数字列表中的)最大数字:
Math.max(1,2,3);//会返回3
由于JavaScript数组没有max()方法,因此您可以应用Math.max()方法。
Math.max.apply(null,[1,2,3]);//也会返回3
第一个参数(null)无关紧要。在本例中未使用它。
这些例子会给出相同的结果:
Math.max.apply(Math,[1,2,3]);//也会返回3 Math.max.apply("",[1,2,3]);//也会返回3 Math.max.apply(0,[1,2,3]);//也会返回3
4、JavaScript严格模式
在JavaScript严格模式下,如果apply()方法的第一个参数不是对象,则它将成为被调用函数的所有者(对象)。在“非严格”模式下,它成为全局对象。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。