apply和call方法定义及apply和call方法的区别


Posted in Javascript onNovember 15, 2015

 如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语言过程中遇到这种感觉,那么就从现在形始,请放下的您的”偏见”,因为这对您来说绝对是一片新大陆。好了,不给大家唠嗑了,言归正传吧,先给大家讲下apply和call方法的定义。

具体内容如下所示:

1、方法定义

call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性.既然作为方法的属性,那它们的使用就当然是针对方法的了.这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同.

call方法:

语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

定义:调用一个对象的一个方法,以另一个对象替换当前对象。

说明:

call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply方法:

语法:apply([thisObj[,argArray]])

定义:应用某一对象的一个方法,用另一个对象替换当前对象。

说明:

如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。

如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数

call, apply作用就是借用别人的方法来调用,就像调用自己的一样.

它们的不同之处:

apply:最多只能有两个参数——新this对象和一个数组 argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里面。如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

call:则是直接的参数列表,主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

更简单地说,apply和call功能一样,只是传入的参数列表形式不同:如 func.call(func1,var1,var2,var3)对应的apply写法为:

func.apply(func1,[var1,var2,var3])

如:

add.apply(sub,[3,1]);
//add.call(sub,3,1);
var a={
n:1,
m:2,
add:function(){
return this.n+this.m;
}
}
var b={n:3,m:4
}
console.log(a.add.call(b));//b.n+b.m=7
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,[]);

以上内容是小编给大家介绍的apply和call方法定义及apply和call方法的区别,希望大家喜欢。

Javascript 相关文章推荐
javascript 导出数据到Excel(处理table中的元素)
Dec 18 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
Dec 09 Javascript
jQuery获取浏览器中的分辨率实现代码
Apr 23 Javascript
js判读浏览器是否支持html5的canvas的代码
Nov 18 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 Javascript
JavaScript实现QQ列表展开收缩扩展功能
Oct 30 Javascript
JS实现图片居中悬浮效果
Dec 25 Javascript
详解使用 Node.js 开发简单的脚手架工具
Jun 08 Javascript
node.js的http.createServer过程深入解析
Jun 06 Javascript
原生js滑动轮播封装
Jul 31 Javascript
JS如何判断对象是否包含某个属性
Aug 29 Javascript
微信小程序实现多张图片上传功能
Nov 18 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
Nov 15 #Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
Nov 15 #Javascript
JS使用eval解析JSON的注意事项分析
Nov 14 #Javascript
js读取并解析JSON类型数据的方法
Nov 14 #Javascript
基于JS实现PHP的sprintf函数实例
Nov 14 #Javascript
javascript动态生成树形菜单的方法
Nov 14 #Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 #Javascript
You might like
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
微信小程序 出现错误:{"baseresponse":{"errcode":-80002,"errmsg":""}}解决办法
2017/02/23 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
python中的句柄操作的方法示例
2019/06/20 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
Python如何获取文件指定行的内容
2020/05/27 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
如何写毕业求职自荐信
2013/11/06 职场文书
总账会计岗位职责
2014/03/13 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers