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获取地址栏中传递的值
Jul 02 Javascript
JS字符串处理实例代码
Aug 05 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
Sep 03 Javascript
详谈javascript中DOM的基本属性
Feb 26 Javascript
多个jQuery版本共存的处理方案
Mar 17 Javascript
利用原生JS与jQuery实现数字线性变化的动画
Feb 24 Javascript
vue进行图片的预加载watch用法实例讲解
Feb 07 Javascript
JavaScript实现多态和继承的封装操作示例
Aug 20 Javascript
在vue中使用express-mock搭建mock服务的方法
Nov 07 Javascript
es6 symbol的实现方法示例
Apr 02 Javascript
JQuery特殊效果和链式调用操作示例
May 13 jQuery
Node4-5静态资源服务器实战以及优化压缩文件实例内容
Aug 29 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 array_merge函数
2014/08/31 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
JS解密入门 最终变量劫持
2008/06/25 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
微信小程序的线程架构【推荐】
2019/05/14 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python入门篇之字典
2014/10/17 Python
python使用pymysql实现操作mysql
2016/09/13 Python
Python pass详细介绍及实例代码
2016/11/24 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
Python中函数的返回值示例浅析
2019/08/28 Python
python创建学生成绩管理系统
2019/11/22 Python
python实现一个猜拳游戏
2020/04/05 Python
pyspark 随机森林的实现
2020/04/24 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
一道SQL面试题
2012/12/31 面试题
关于是否需要写商业计划书
2014/02/07 职场文书
求职意向书范文
2014/04/01 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
三八妇女节寄语
2015/02/27 职场文书
升职自荐书
2019/05/09 职场文书