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 相关文章推荐
IE8 浏览器Cookie的处理
Jan 31 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
Nov 20 Javascript
js的onload事件及初始化按钮事件示例代码
Sep 25 Javascript
如何正确使用javascript 来进行我们的程序开发
Jun 23 Javascript
jquery使用hide方法隐藏指定id的元素
Mar 30 Javascript
Jquery全选与反选点击执行一次的解决方案
Aug 14 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
jQuery中 $ 符号的冲突问题及解决方案
Nov 04 Javascript
webpack常用配置项配置文件介绍
Nov 07 Javascript
webpack分离css单独打包的方法
Jun 12 Javascript
深度了解vue.js中hooks的相关知识
Jun 14 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入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
Textarea根据内容自适应高度
2013/10/28 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
自我评价正确写法范文
2013/12/10 职场文书
青年创业培训欢迎词
2014/01/10 职场文书
大学生实习感言
2014/01/16 职场文书
寒假实习自荐信
2014/01/26 职场文书
建筑安全责任书范本
2014/07/24 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
解析python中的jsonpath 提取器
2022/01/18 Python
使用CSS连接数据库的方式
2022/02/28 HTML / CSS