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 相关文章推荐
JavaScript 学习笔记(七)字符串的连接
Dec 31 Javascript
ExtJs使用总结(非常详细)
Mar 22 Javascript
ie中js创建checkbox默认选中问题探讨
Oct 21 Javascript
js文件包含的几种方式介绍
Sep 28 Javascript
jQuery Mobile页面返回不需要重新get
Apr 26 Javascript
Sortable.js拖拽排序使用方法解析
Nov 04 Javascript
浅谈移动端之js touch事件 手势滑动事件
Nov 07 Javascript
详解vue的数据binding绑定原理
Apr 12 Javascript
vue中使用localstorage来存储页面信息
Nov 04 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
Apr 23 Javascript
vue多次循环操作示例
Feb 08 Javascript
记一次vue-webpack项目优化实践详解
Feb 17 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中curl和file_get_content的区别
2014/05/10 PHP
CI框架附属类用法分析
2018/12/26 PHP
js异或加解密效果代码
2008/06/25 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
js中function()使用方法
2013/12/24 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
记录Django开发心得
2014/07/16 Python
使用python实现rsa算法代码
2016/02/17 Python
python 中random模块的常用方法总结
2017/07/08 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
财务经理岗位职责
2013/11/09 职场文书
冰淇淋店的创业计划书
2014/02/07 职场文书
新学期标语
2014/06/30 职场文书
会议欢迎标语
2014/06/30 职场文书
小学开学标语
2014/07/01 职场文书
单位委托书怎么写
2014/08/02 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
行政复议决定书
2015/06/24 职场文书
2016年感恩节寄语
2015/12/07 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
导游词之西安大清真寺
2019/12/17 职场文书