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类定义语法,私有成员、受保护成员、静态成员等介绍
Dec 08 Javascript
Javascript图片上传前的本地预览实例
Jun 16 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
Jan 20 Javascript
jQuery+ajax+asp.net获取Json值的方法
Jun 08 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
Sep 20 Javascript
js实现弹窗暗层效果
Jan 16 Javascript
微信小程序 选项卡的简单实例
May 24 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
Jan 25 jQuery
vue-cli基础配置及webpack配置修改的完整步骤
Oct 20 Javascript
vue中el-input绑定键盘按键(按键修饰符)
Jul 22 Javascript
原生微信小程序开发中 redux 的使用详解
Feb 18 Javascript
关于Vue Router的10条高级技巧总结
May 06 Vue.js
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的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
Python 中的lambda函数介绍
2018/10/10 Python
python实现贪吃蛇小游戏
2020/03/21 Python
python按比例随机切分数据的实现
2019/07/11 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
为什么说python适合写爬虫
2020/06/11 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
数据员岗位职责
2013/11/19 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
教师个人年度总结
2015/02/11 职场文书
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript