一般apply()、call()和bind()会一起比较。

他们三个都是改变this对象指向的方法。

apply()和cal()方法是会立即执行,apply把参数作为数组,call方法接收一个一个的参数。

bind()就是绑定,会返回函数。

这是我之前的理解,太不深刻了。

比如说MDN上的这个例子:

this.x = 9; // 在浏览器中,this指向全局的 "window" 对象
var module = {
x: 81,
getX: function() { return this.x; }
};

module.getX(); // 81

var retrieveX = module.getX;
retrieveX();
// 返回9 - 因为函数是在全局作用域中调用的

// 创建一个新函数,把 'this' 绑定到 module 对象
// 新手可能会将全局变量 x 与 module 的属性 x 混淆
var boundGetX = retrieveX.bind(module);
boundGetX(); // 81

个人理解是还是要搞清楚this绑定的对象才行。
module.getX();这个语句里直接调用module对象的getX方法,this指向的就是module对象,这个对象里x为81.
var retrieveX = module.getX;这个语句里就是把getX函数当做一般函数调用,指向的就是调用它的对象retrieveX,而这个对象又是全局对象,所以指向的就是全局,x=9
var boundGetX = retrieveX.bind(module);
boundGetX(); // 81
bind()方法登场了,retrieveX可以理解为一个函数表达式吧(存疑),把这个函数里的this指向module对象,返回这个新函数给boundGetX,那么再调用boundGetX里面生成的this就指向的是module了。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
https://blog.csdn.net/YZ0826/article/details/80176169

最新文章

  1. 1. 什么是Docker?
  2. Eclipse swt开发环境搭建
  3. 通过MongoDB的samus驱动实现基本数据操作
  4. Hibernate Criteria Restrictions
  5. 微软测试版Visual Studio for Mac下载
  6. 如何给你的VS2010添加创建文件后的头注释
  7. 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)
  8. Centos 6.5升级安装Git
  9. 【枚举+数学】【HDU1271】整数对 难度:五颗星
  10. SDK无法更新
  11. 引用第三方框架 不支持ARC
  12. 1010 Robot Motion
  13. Java中引用的浅复制和深复制
  14. 成功解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module 'express'
  15. python基础—字典的使用{}_多级字典嵌套
  16. ES6的新API如Promise,Proxy,Array.form(),Object.assign()等,Babel不能转码, 使用babel-polyfill来解决
  17. 逆袭之旅DAY15.东软实训.Oracle.约束、序列、视图、索引、用户管理、角色
  18. 二、消息队列之如何在C#中使用RabbitMQ(转载)
  19. 【TensorFlow】TF-tf.nn.dropout
  20. Oracle体系结构之oracle密码文件管理

热门文章

  1. 【Java】【14】从后往前每隔n位加逗号(用于货币)
  2. SQL合并
  3. A锚点实现,滚动页面内容改变tab选项
  4. yml多环境配置
  5. python2.x 与 python3.x的不同
  6. C# json转model 以及model转json
  7. Rhino学习教程——1.4
  8. 数据结构复习之Vector
  9. AStar算法()
  10. Python3 open函数