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