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将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
JavaScript 32位整型无符号操作示例
Dec 08 Javascript
JS 打印功能代码可实现打印预览、打印设置等
Oct 31 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
Jan 22 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
JS 拦截全局ajax请求实例解析
Nov 29 Javascript
微信小程序之小豆瓣图书实例
Nov 30 Javascript
vue组件如何被其他项目引用
Apr 13 Javascript
jQuery操作元素的内容和样式完整实例分析
Jan 10 jQuery
vue请求数据的三种方式
Mar 04 Javascript
Vue项目移动端滚动穿透问题的实现
May 19 Javascript
uniapp实现可以左右滑动导航栏
Oct 21 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源码之explode使用说明
2011/08/05 PHP
php实现图片缩放功能类
2013/12/18 PHP
PHP小教程之实现链表
2014/06/09 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
动态加载iframe
2006/06/16 Javascript
JavaScript中的对象化编程
2008/01/16 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
JS前端加密算法示例
2016/12/22 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
Unix里面如何在后台运行程序
2016/10/14 面试题
事业单位辞职信范文
2014/01/19 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
高考励志标语
2014/06/05 职场文书
股东合作协议书
2014/09/12 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
Python实现单例模式的5种方法
2021/06/15 Python
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫