首先三个方法的作用:
1:都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
2:都是改变this的指向方向

区别
call()和apply()接受参数的方式不同,bind()接受参数的方式和call()相同但是返回一个新的函数
参考代码例子如下:

//call,aplly和bind的区别function foo(from_city,come_city){console.log(this.name+"来自"+from_city+"去往"+come_city);}var obj1={name:'小李'}var obj2={name:"小猪"}foo.call(obj1,'湖南','哈南');foo.apply(obj2,['湖南','长沙']);foo.bind(obj1,'北京','大理')();

如上:
call()方法:接受两个参数,一个是函数运行时的作用域(this需要指向的),一个是所有参数都必须列举出来,如:fn.call(obj,参数1,参数2,参数3…)
apply()方法:接受两个参数,一个是函数运行时的作用域(this需要指向的),一个是参数数组,如:fn.apply(obj,[参数1,参数2,参数3…])
bind()方法:同call()方法接受参数的方法一样,不同的是bind()返回的是一个新的函数,必须需要再次执行一下。如:如:fn.bind(obj,参数1,参数2,参数3…)()

扩展
使用apply()来展开一个数组,或者用bind()可以对参数进行柯里化(预先设置一些参数)
比如以下代码:

function foo(a,b){console.log("a:"+a+"b:"+b);}foo.apply(null,[2,3]);//a:2 b:3var bar=foo.bind(null,2);bar(3);//a:2 b:3

如果函数不关心this的话,仍然需要传入一个占位值,这是null是一个不错的选择,就像代码所示的那样。

call(),apply()和bind()的区别和应用以及扩展相关推荐

  1. call、apply 以及 bind 的区别和用法

    call.apply.bind call和apply共同点 共同点:改变函数执行时的上下文,将一个对象的方法交给另一个对象来执行,并且是立即执行的 call和apply的对象,必须是一个函数Funct ...

  2. call、apply、bind的区别,模拟call、apply和bind的实现

    bind:bind绑定完this的指向后会返回一个新的函数体,不会被立即调用   call&apply:绑定完this的指向后会立即调用   call与apply的区别:     call:第 ...

  3. call apply 和 bind的区别

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

  4. call和apply和bind的区别

    都是修改function内在的this的指向 如果第一个参数传入的是null的话,那么浏览器中默认是window,node中默认是global,但是函数体内部如果是严格模式,那么this仍然是null ...

  5. call()、apply()、bind()的区别

    函数对象方法 call().apply()这个两个都是函数对象的方法.需要通过函数对象调用 当对函数调用call()和apply().都会调用函数执行 /* call()和apply()是函数对象的两 ...

  6. call、apply、bind的区别?(面试题-JavaScript部分)

    共同点: 可以改变this指向 语法: 函数.call().函数.apply().函数.bind() 不同点: 1. call.apply可以立即执行. bind不会立即执行,因为bind返回的是一个 ...

  7. call、apply、bind 用法和区别

    js 中,每个函数的原型都指向Function.prototype对象,因此,每个函数都会有apply,call,和bind方法,这些方法继承于Function,都是用于改变函数执行时的上下文,从而改 ...

  8. call()、apply()、bind()的使用和区别以及使用场景

    call().apply().bind()的共同点: 都可以改变this指向 call的使用 var str = 'window'; var obj = { str: 'obj内的str' }; fu ...

  9. 微信小程序之apply和call ( 附示例代码和注释讲解) apply call  bind

    微信小程序开发交流qq群   173683895 相同点:作用是一样的,它们能劫持另外一个对象的方法,继承另外一个对象的属性: js中的call(), apply()和bind()是Function. ...

最新文章

  1. ASP.NET Web Pages – 帮助器简介
  2. 窗口最小化之后没有图标
  3. python的for循环语句_干货丨Python的循环语句基础讲解!
  4. linux日志中显示skipping,linux推荐使用logrotate自动管理日志文件
  5. Java黑皮书课后题第3章:**3.22(几何:点是否在圆内)编写程序,提示用户输入一个点(x,y),然后检查这个点是否在以(0,0)为圆心、半径为10的圆内
  6. iOS经典面试题之深入解析类Class的iskindOfClass与isMemberOfClass的底层原理
  7. 【渝粤教育】广东开放大学 网络市场调查与预测 形成性考核 (23)
  8. 使用CSS实现无滚动条滚动
  9. 3D 机器视觉 02 - FPGA生成N位元格雷码
  10. 苹果商店近期审核的问题
  11. 关于python中enumerate和zip函数的用法及举例
  12. [技巧心得] 嵌套选择器优先级
  13. Linux Tomcat9 控制界面及管理配置
  14. 软件行业各职位英文缩写
  15. python函数和代码复用思维导图_函数式编程库:Ramda函数思维导图,帮你快速选择要用的函数...
  16. Office在线协作(一)- 在本地服务器上安装ONLYOFFICE Docs Community Edition For Windows Server - 超详细安装教程
  17. [从零开始学FPGA编程-2]:本系列主要内容预览(持续更新):快速入门篇、提升篇、高阶篇
  18. shal+php,学习笔记---PHP中几种加密算法(MD5,shal,base64_encode等)
  19. prompt learning——你需要掌握的基础知识以及离散型 prompt 的代码
  20. 这苦日子B站熬出头了?

热门文章

  1. [POI2010]PIL-Pilots
  2. win10系统打开任务管理器和删除流氓软件的方法
  3. soso地图api接口poi检索示例----并在信息框显示经纬度
  4. 大长今(汤灿版) 歌词
  5. 运算符(逻辑或||)和(逻辑与)和括号的优先级
  6. mysql函数LOCATE、POSITION和INSTR
  7. R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化
  8. odoo15全面解决财务应收应付全面管理方案(含银企直联)(1)
  9. MATLAB应用:第二章-基本使用方法
  10. 安装mingw发现bin目录下没有mingw32-make.exe怎么办?