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 相关文章推荐
在你的网页中嵌入外部网页的方法
Apr 02 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
Mar 31 Javascript
深入理解JavaScript高级之词法作用域和作用域链
Dec 10 Javascript
省市选择的简单实现(基于zepto.js)
Jun 21 Javascript
BootStrap Table 获取同行不同列元素的方法
Dec 19 Javascript
深入浅析JavaScript中的RegExp对象
Sep 18 Javascript
微信小程序支付功能 php后台对接完整代码分享
Jun 12 Javascript
Vue2 监听属性改变watch的实例代码
Aug 27 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
Sep 18 Javascript
JavaScript循环遍历你会用哪些之小结篇
Sep 28 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
Jul 29 Javascript
vue实力踩坑之push当前页无效
Apr 10 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&mysql(二)
2006/10/09 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
ext实现完整的登录代码
2008/08/08 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
Pygame的程序开始示例代码
2020/05/07 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
超级礼物观后感
2015/06/15 职场文书
感恩教师节主题班会
2015/08/12 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python