在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。

JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」。

 
apply(): 将函数作为指定对象的方法来调用,传递给它的是指定的参数数组
function.apply(thisobj, args) 或者 function.apply(thisobj, args)

1、thisobj是调用function的对象,函数体内thisobj为this,如果参数为null则使用全局对象
2、返回调用函数function的返回值

bind(): 主要作用:将函数绑定到一个对象,返回一个新函数,通过可选的指定参数,作为指定对象的方法调用该方法

语法 fun.bind(thisArg[, arg1[, arg2[, ...]]])
function.bind(A) 或者是function.bind(A, args...);

1、A要绑定在函数上的对象
2、args...要绑定在函数上的零个或者是多个函数值
3、返回一个新函数,该函数会当做A的方法调用,并向它传入args参数

bind是ES5新增的一个方法
传参和call或apply类似
不会执行对应的函数,call或apply会自动执行对应的函数
返回对函数的引用

call(): 类似apply,将函数作为指定对象的方法来调用,传递给它的是指定参数
function.call(thisobj, args.....)

1、thisobj是调用function的对象,函数体内thisobj为this,如果参数为null则使用全局对象
2、返回调用函数function的返回值

apply与call的区别:

    <script>
function print(a,b,c,d){
alert(a + b + c + d);
}
function example(a,b,c,d){
//当参数很明确,一般使用call
print.call(this,a,b,c,d);
//封装成数组
print.apply(this,[a,b,c,d])
//javascript方法本身有的arguments数组,当参数不明确的时候可以用apply结合arguments
print.apply(this,arguments)
}
example("心","想","事","成")
</script>
var func = function(arg1, arg2) {

};
就可以通过如下方式来调用:
func.call(this, arg1, arg2);
func.apply(this, [arg1, arg2])

三者区别demo:

<script type="text/javascript">
var obj = {
num: 888,
};
var foo = {
getNum: function() {
return this.num;
}
}
console.log(foo.getNum.bind(obj)()); //
console.log(foo.getNum.call(obj)); //
console.log(foo.getNum.apply(obj)); //
//apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;
//apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文;
//apply 、 call 、bind 三者都可以利用后续参数传参;
//bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。
</script>

最新文章

  1. git代理,windows命令行代理,linux命令行代理
  2. 解决postgresql -- ERROR: 42601: query has no destination for result data
  3. Linux学习笔记(8)Linux常用命令之网络命令
  4. 一个 IT 青年北漂四年的感悟
  5. c语言解数独
  6. 深度探索C++对象模型读书笔记(2)
  7. POJ 2777(线段树)
  8. java新手笔记19 抽象类
  9. VI一个终端编辑多个文件的命令
  10. 求和函数 sum详解
  11. -_-#【JS】isFinite
  12. C++笔试题库-------Coding整理
  13. 将默认首页设置成index.do的方法
  14. C# 文件下载类
  15. The account &#39;...&#39; is no team with ID &#39;...&#39;
  16. 》》初识移动端--rem
  17. 本地Git与Github建立关联
  18. 数据结构与算法之PHP递归函数
  19. 利用div+css实现九宫格,然后用js实现点击每个格子可以随机更改格子(div)的背景颜色
  20. 协程 及 libco 介绍

热门文章

  1. leetcode 660. Remove 9
  2. 黑客常用WinAPI函数整理
  3. jdbc 分页
  4. 转载:Eclipse build Android时不生成apk问题解决方法
  5. selenium中关于driver的小记
  6. python3.6 + selenium2.53.1 查询数据库并将返回的内容中每一行的内容转换成class对象
  7. SPOJ GSS3 线段树系列1
  8. JS 数据类型入门与typeof操作符
  9. shiro错误:Subject does not have permission [user:select]
  10. 数据结构 - 静态单链表的实行(C语言)