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 相关文章推荐
一个页面元素appendchild追加到另一个页面元素的问题
Jan 27 Javascript
js字符串转换成xml对象并使用技巧解读
Apr 18 Javascript
jquery实现checkbox全选全不选的简单实例
Dec 31 Javascript
简介JavaScript中的setTime()方法的使用
Jun 11 Javascript
jQuery入门之层次选择器实例简析
Dec 11 Javascript
分享JavaScript与Java中MD5使用两个例子
Dec 23 Javascript
node.js使用cluster实现多进程
Mar 17 Javascript
vue-cli如何添加less 以及sass
Jul 06 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
Oct 14 jQuery
详解mpvue中小程序自定义导航组件开发指南
Feb 11 Javascript
ES6知识点整理之对象解构赋值应用示例
Apr 17 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 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_filter除去数组中的空字符元素
2020/06/21 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
Python找出最小的K个数实例代码
2018/01/04 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
公司聘任书模板
2014/03/29 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
教师岗位职责
2015/02/03 职场文书