apply()call(),这两个方法的用途都是在特定的作用域中调用函数,等同于设置函数体内部 this 指向的对象,也就是改变函数运行时的作用域。
  apply() 接收两个参数,第一个参数是给绑定 this 的值,第二个参数是参数数组,call()apply() 的作用相同,接收的第一个参数也相同,区别在于之后传入参数的方式不同,看个例子:

var o = {color: 'blue'
}
var color = "red";function sayColor(num) {console.log(this.color + '-' + num);
};
sayColor(1); //red-1
sayColor.apply(o,[2]); //blue-2
sayColor.call(o,3); //blue-3

  可以看出,apply()call() 作用相同,传入参数也类似,区别只是apply() 传入的是个数组,call() 参数必须逐个列举出来传入。
  再说bind() ,传参方式和call() 比较相似,bind() 第一个参数也是绑定this的值,后面的参数也是需要逐个列举出来传入,不同的是,bind() 不会立即执行,bind() 会生成一个新的函数,之后就可以随时调用。说的不明白,看代码:

var o = {color: 'blue'
}
var color = "red";function sayColor(num) {console.log(this.color + '-' + num);
};
var color = sayColor.bind(o,4);
color(); //blue-4

  bind() 并不支持IE6~8,若想要低版本的IE支持bind() ,需要通过Functionprototype进行扩展,自定义一个bind() 方法。像这样:

if (! function() {}.bind) {Function.prototype.bind = function(context) {var self = this,args = Array.prototype.slice.call(arguments);return function() {return self.apply(context, args.slice(1));}};
}

转载于:https://www.cnblogs.com/yangrenmu/p/7085859.html

js中的apply()、call() 和 bind()相关推荐

  1. 浅谈JavaScript中的apply,call和bind

    apply,call,bine 这三兄弟经常让初学者感到疑惑.前两天准备面试时特地做了个比较,其实理解起来也不会太难. apply MDN上的定义: The apply() method calls ...

  2. 前端学习(3270):js中this的使用call bind

  3. 理解js中的this指向以及call,apply,bind方法

    <script> function a(){var user = "追梦子";console.log(this.user); //undefinedconsole.lo ...

  4. js中函数对象的方法,原型方法apply、call、bind、toString、toLocaleString、valueOf

    全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中函数也是一种对象,因此有自己的原型对象,可以作为其他对象的属性,也可以作为其他函数的参数. 函数方法 [apply() ...

  5. JS中bind、call和apply的作用以及在TS装饰器中的用法

    目录 1,前言 1,call 1.1,例子 1.2,直接调用 1.3,将this指向另一个对象 1.4,传递参数 2,apply 2.1,例子 2.2,直接调用 2.3,将this指向另一个对象 2. ...

  6. JS中的call、apply、bind方法详解

    bind 是返回对应函数,便于稍后调用:apply .call 则是立即调用 . apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(co ...

  7. 复习javascript中call,apply,bind的用法

    一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function m ...

  8. js中自己实现bind函数的方式

    前言 最近由于工作比较忙,好久都没时间静下心来研究一些东西了.今天在研究 call 和 apply 的区别的时候,看到 github 上面的一篇文章,看完以后,感觉启发很大. 文章链接为 https: ...

  9. 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法

    by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法 (How to use ...

最新文章

  1. protobuf + maven 爬坑记
  2. 中one_十月中大型SUV销量排行:途昂稳坐第一,理想ONE晋升亚军
  3. TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式
  4. Java8 Striped64 和 LongAdder
  5. 《南溪的目标检测学习笔记》——COCO数据集的学习笔记
  6. 大厂不一定要进,算法必须要学!精选算法文章89篇
  7. 5G:无人驾驶的“超级英雄”路
  8. 712. Minimum ASCII Delete Sum for Two Strings
  9. 我们都被监控了?揭秘全球电信网络7号信令(SS7)漏洞
  10. unity3——Humanoid与generic的区别
  11. sqlite3驱动文件
  12. windows7蓝牙怎么打开_英特尔升级Wi-Fi 和蓝牙驱动,Win10 更新5月版稳了
  13. 根据两点经纬度计算方位角
  14. 【细小碎的oi小知识点总结贴】不定时更新(显然也没人看qwq)
  15. android怎么删除插件,Android手机如何添加删除桌面图标和插件
  16. 仿原生安卓文件管理器
  17. 软件导出excel时提示没有注册类
  18. GitHub疯传,这个Leetcode刷题手册到底有多流弊?
  19. Vue 项目路由出现 message: “Navigating to current location (XXX) is not allowed“的问题
  20. 小白Java学习之路(abstract抽象类,final,接口,equals)

热门文章

  1. int数组,找小于右边所有数,大于左边所有数的数
  2. 2017年深度学习十大趋势预测
  3. 第二章 知识图谱——机器大脑中的知识库
  4. C++中引用()的用法和应用实例
  5. 第四季度数据中心网络设备销量达35亿美元
  6. java线程同步的五种方法
  7. ListDefinition Tips
  8. GoCart 分类和产品 测试一
  9. 保监会:《保险公司信息系统安全管理指引(试行)》
  10. AWS推出深度学习容器,简化AI程序开发