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 相关文章推荐
js 表格隔行颜色
Dec 02 Javascript
JavaScript flash复制库类 Zero Clipboard
Jan 17 Javascript
javascript时区函数介绍
Sep 14 Javascript
ie下jquery.getJSON的缓存问题的处理方法
Mar 29 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
Jan 28 Javascript
JavaScript的strict模式与with关键字介绍
Feb 08 Javascript
JavaScript之Vue.js【入门基础】
Dec 06 Javascript
解决给dom元素绑定click等事件无效问题的方法
Feb 17 Javascript
详谈js中标准for循环与foreach(for in)的区别
Nov 02 Javascript
微信小程序canvas拖拽、截图组件功能
Sep 04 Javascript
webpack4 入门最简单的例子介绍
Sep 05 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
检查url链接是否已经有参数的php代码 添加 ? 或 &
2010/02/09 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Python实现二分查找算法实例
2015/05/26 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
营业员个人总结的自我评价
2013/10/25 职场文书
会计电算化专业毕业生推荐信
2013/12/24 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
个人安全生产承诺书
2014/05/22 职场文书
教师党员自我评价范文
2015/03/04 职场文书
党小组推荐意见
2015/06/02 职场文书
杨善洲观后感
2015/06/04 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
创业计划书之家教中心
2019/09/25 职场文书
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers