bind方法,顾名思义,就是绑定的意思,到底是怎么绑定然后怎么用呢,下面就来说说我对这个方法的理解。

语法

fun.bind(this,arg1,arg2,...)

bind()方法会创建一个新的函数,称为绑定函数,fun方法在this环境下调用

该方法可传入两个参数,第一个参数作为this,第二个及以后的参数则作为函数的参数调用

实例 

1.创建绑定函数

 1 this.a = 1;
2 var module = {
3 a : 2,
4 getA:function() {
5 return this.a;
6 }
7 };
8 module.getA();//2
9
10 var getA1 = module.getA;
11 // getA在外部调用,此时的this指向了全局对象
12 getA1();//1
13
14 // 再把getA1方法绑定到module环境上
15 var getA2 = getA1.bind(module);
16 getA2();

从上面的例子可以看出,为什么要创建绑定函数,就是当我们调用某些函数的时候是要在特定环境下才能调用到,所以我们就要把函数放在特定环境下,就是使用bind把函数绑定到特定的所需的环境下。

2.让函数拥有预设的参数

使用bind()方法使函数拥有预设的初始参数,这些参数会排在最前面,传给绑定函数的参数会跟在它们后面

 1 function list(){
2 // 让类数组arguments拥有数组的方法slice,这个函数实现了简单把类数组转换成数组
3 return Array.prototype.slice.call(arguments);
4 }
5
6 list(1,2,3);//[1,2,3]
7
8 //给list绑定一个预设参数4
9 var list1 = list.bind(undefined,4);
10
11 list1();//[4]
12
13 list1(1,2,3);//[4,1,2,3]

3.setTimeout的使用

正常情况下,调用setTimeout的时候this会指向全局对象,但是使用类的方法时我们需要指向类的实例,所以要把this,绑定要回调函数方便继续使用实例

 1 function Fun1() {
2 this.name = 1;
3 }
4 Fun1.prototype.fun2 = function() {
5 window.setTimeout(this.fun3.bind(this), 1000);
6 }
7 Fun1.prototype.fun3 = function(){
8 console.log('name:'+this.name);//name:1
9 }
10 var fun = new Fun1();
11 fun.fun2();

4.快捷方法--把类数组转换成数组

第一种方法是使用apply方法

1 function fun1() {
2 var slice = Array.prototype.slice;
3 return slice.apply(arguments);
4 }
5
6 fun1(1,2,3);//[1,2,3]

第二种方法是使用call方法和bind方法一起使用

function fun2() {
var unboundSlice = Array.prototype.slice;
// 把函数的call方法绑定在数组slice方法上,之后再给call方法传递参数
var slice = Function.prototype.call.bind(unboundSlice);
return slice(arguments);
} fun2(1,2,3);//[1,2,3]

最新文章

  1. tomcat开发远程调试端口以及利用eclipse进行远程调试
  2. 当shiro做成动态URL管理时出现循环注入BeanCurrentlyInCreationException的问题解决方法
  3. 提高生产性工具 - Model代码生成器(二)
  4. 如果动态设置json对象的key
  5. 如何查询Oracle中所有用户信息
  6. EF生成实体模板改良
  7. 【Spring-AOP-学习笔记-7】@Around增强处理简单示例
  8. 深入分析ConcurrentHashMap(转)
  9. Linux 信号量互斥编程
  10. js计算时间差,包括计算,天,时,分,秒
  11. NXT项目准备资料
  12. Delphi过程函数传递参数的八种方式
  13. js判断浏览器在PC中打开还是移动设备中打开
  14. java 实现websocket的两种方式
  15. react+redux+webpack+git技术栈
  16. freetype 字形解析
  17. 前端js 实现文件下载
  18. mysql批量插入,批量更新
  19. 绑定DDL控件方法
  20. rsync+inotify文件同步

热门文章

  1. BZOJ1222[HNOI2001]产品加工——DP
  2. BZOJ3676 APIO2014回文串(manacher+后缀自动机)
  3. BZOJ5300 [Cqoi2018]九连环 【数学】【FFT】
  4. python3网络爬虫(4):python3安装Scrapy
  5. MT【233】染色正方形
  6. MT【29】介绍向量的外积及应用举例
  7. bat 脚本处理windows 文件
  8. apache 限制连接并发数和下载速度
  9. 自学Linux Shell16.1-函数概念
  10. FFMEPG -- A ffmpeg and SDL Tutorial : tutorial05