JS的bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
通过bind可解决两个问题:1)以隐蔽和优雅的方式解决依赖注入的问题,可以将函数执行需要的上下文环境对象通过bind方法传递给函数,在函数内部直接使用this来引用。2)解决多层调用时this对象无法传递给内部函数的问题,实际是第一个问题的延展。
看代码样例:

var obj = {a: function(){//'this' is 'obj',是真正的thisconsole.log(this);var func = function(){//'this' is 'window', 容易混淆的地方,上层对象无法通过this引用了,这里的this是window对象了。console.log(this);//所以下面这句话出错,无法找到属性console.log(this.c);};func();},b : function(){var func = function(){//'this' is 'obj',是通过bind传入的。console.log(this);console.log(this.c);}.bind(this);func();},c : 'Hello!'
}obj.a();
obj.b();

在实际开发工作中,如果需要在函数内部应用外部对象,可以通过bind传入;如果需要在嵌套函数或回调函数内部应用上级对象,也可以通过bind传入。

详解javascript的bind方法相关推荐

  1. 详解JavaScript中shift()方法的使用

    定义和用法 shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值. 语法 arrayObject.shift() 返回值 数组原来的第一个元素的值. 说明 如果数组是空的,那么 ...

  2. 详解JavaScript数组过滤相同元素的5种方法

    详解JavaScript数组过滤相同元素的5种方法:https://www.jb51.net/article/114490.htm 转载于:https://www.cnblogs.com/bydzha ...

  3. window 程序报错 自动重启_好程序员web前端教程之详解JavaScript严格模式

    好程序员web前端教程之详解JavaScript严格模式,严格模式(Strict mode)是由ECMA-262规范定义的新兴JavaScript标准,发布于2009年12月第五版.旨在改善错误检查功 ...

  4. 详解JavaScript变量类型判断及domReady原理 写得很好

    原文:详解JavaScript变量类型判断及domReady原理 我们知道,在开发JavaScript时候,经常要判断JavaScript变量类型,此 JavaScript教程 详细介绍JS变量的判断 ...

  5. es6字符串添加html标签,JavaScript_详解JavaScript ES6中的模板字符串,在 ES6 中引入了一种新的字符 - phpStudy...

    详解JavaScript ES6中的模板字符串 在 ES6 中引入了一种新的字符串字面量 - 模板字符串,除了使用反引号 (`) 表示,它们看上去和普通的字符串没有什么区别.在最简单的情况下,他们就是 ...

  6. js模板字符串自定义类名_详解JavaScript ES6中的模板字符串

    这篇文章主要介绍了详解JavaScript ES6中的模板字符串,JS的ES6版本带来诸多简洁化方面的重大改进,需要的朋友可以参考下 在 ES6 中引入了一种新的字符串字面量 - 模板字符串,除了使用 ...

  7. 详解JavaScript对象深拷贝

    详解JavaScript对象深拷贝 在几乎所有编程语言中,对象都以引用形式保存给变量.复制给其他变量.JavaScript语言也是如此.因此简单的进行赋值操作进行复制仅仅是对对象数据的引用地址进行一个 ...

  8. 详解Javascript本地存储的方式、区别及应用场景

    详解Javascript本地存储的方式.区别及应用场景 一.方式 javaScript本地缓存的方法我们主要讲述以下四种: cookie sessionStorage localStorage ind ...

  9. 详解 JavaScript 的 IIFE 语法

    详解 JavaScript 的 IIFE 语法 IIFE 语法 IIFE 语法的一些变体 小括号去哪儿了? 命名的 IIFE 防止连接文件时出现问题 使用箭头函数代替函数表达式 一些不推荐的立即调用函 ...

最新文章

  1. 论文阅读笔记:You Only Look Once: Unified, Real-Time Object Detection
  2. 记录之tensorflow和pytorch中的取范数归一化操作
  3. poj1797Heavy Transportation最大生成树
  4. “盛大文学”年终派对
  5. Sql Server 中存储过程的output return的区别
  6. webflow如何使用_我如何使用Webflow构建辅助项目以帮助设计人员进行连接
  7. mysql poolsize_thread_pool_size的调整
  8. numpy序列预处理dna序列_干货 :教你一文掌握数据预处理
  9. java canvas类_java中的canvas类有什么作用?
  10. transformer:self-attention 自注意力机制详解
  11. MDM数据分析功能说明
  12. Interfaces for Music音乐界面——翻译
  13. [JL]最后的晚餐 动态规划(DP) codevs5318
  14. linux字符串替换命令,Linux使用sed命令替换字符串教程
  15. 【汉字识别】基于matlab GUI汉字精准识别【含Matlab源码 2197期】
  16. 上海市医药学校计算机房,上海市医药学校校内比价文件综合楼三楼机房信息发布及广播配套.DOC...
  17. ArrayList集合(Java)
  18. 1.7 全通滤波器与最小相位系统
  19. android wifi驱动加载失败怎么办,请教WIFI连接失败问题,如何解决
  20. golang切片简介

热门文章

  1. jQuery/Zepto的Bootstrap轮播图中图片自适应宽高并居中插件
  2. 【转贴】SAP学习经验谈
  3. python静态属性@property、类方法@classmethod、静态方法@staticmethod和普通方法
  4. 学习设计模式 - 六大基本原则之开闭原则
  5. building a new horizon
  6. WampServer
  7. The Pragmatic Programmer 读书笔记之中的一个 DRY-Don’t Repeat Youself
  8. WCF远程服务器返回了意外响应: (413) Request Entity Too Large问题处理
  9. 译文:如何使用SocketAsyncEventArgs类(How to use the SocketAsyncEventArgs class)
  10. T SQL + 正则表达式