更多内容: http://blog.yuhai.win

参考地址:1、http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651551172&idx=1&sn=0f8364c6902fcac8e22f8ae3fabecd17&scene=0#rd2、http://www.cnblogs.com/zichi/p/4357023.html

1、 bind 和 call 以及apply 一样,都是可以改变上下文的this指向的。不同的是call和apply一样,直接引用在方法上,二bin绑定this后返回一个方法。



2、案例

var obj = {a: 1,b: 2,getCount: function(c, d) {return this.a + this.b + c + d;}
};window.a = window.b = 0;
console.log(obj.getCount(3, 4));  // 10
var func = obj.getCount;
console.log(func(3, 4));  // 7


3、造成上面问题的原因是 func 在上下文中的this 是window 。 bind 可以改变this指向。bind是function的一个函数扩展方法,bind 以后代码重新绑定了func内部的this指向。


var obj = {a: 1,b: 2,getCount: function(c, d) {return this.a + this.b + c + d;}
};window.a = window.b = 0;
var func = obj.getCount.bind(obj);
console.log(func(3, 4));  // 10

以上代码不兼容ie6-ie8


var obj = {a: 1,b: 2,getCount: function(c, d) {return this.a + this.b + c + d;}
};Function.prototype.bind = Function.prototype.bind || function(context) {var that = this;return function() {// console.log(arguments); // console [3,4] if ie<6-8>return that.apply(context, arguments);}
}
window.a = window.b = 0;
var func = obj.getCount.bind(obj);
console.log(func(3, 4));  // 10


3、 bind() 方法会创建一个新函数,当这个心函数被调用时,他的this值是传递给bind() 的第一个参数,他的参数是bind() 的其他参数和其原本的参数。


function fn(a, b, c) {return a + b + c;
}var _fn = fn.bind(null, 10);
var ans = _fn(20, 30); // 60


4、使用bind返回的function ,使用 new 操作符调用绑定函数时,bind的第一个参数无效

function Person(name, age) {this.name = name;this.age = age;
}var _Person = Person.bind({});
var p = new _Person('hanzichi', 30); // Person {name: "hanzichi", age: 30}

关于 bind 你可能需要了解的知识点以及使用场景相关推荐

  1. 【Unity3D 灵巧小知识点】 ☀️ | 切换场景后保留上个场景中的游戏物体不被销毁

    Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...

  2. Runtime重要知识点以及使用场景(编译过程和Runtime两者如何连接的)

    Runtime概念介绍 Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制.而这个扩展的核心是一个用 C 和 编译语言 写的 Runtime 库.它 ...

  3. cocos creator 知识点,切换场景

    最近在学习cocos creator的相关内容,刚开始学习,对每天的东西做一个总结 场景切换:cocoscretor内置的场景切换是没有效果的,就是没有2dx里的过渡动画,要实现动画效果得自己写(我不 ...

  4. 关于代码家(干货集中营)共享知识点汇总系列——前端

    关于代码家(干货集中营)共享的所有知识点前端部分的汇总,后续每周会对其进行更新 更多内容请选择以下入口 关于代码家(干货集中营)共享知识点汇总系列--Android 关于代码家(干货集中营)共享知识点 ...

  5. 全网最详细的渗透测试靶机实操步骤——vulnhub靶机实战(七)IMF【包含了sql注入,文件上传,gif图片木马制作,缓冲区溢出漏洞sploit等诸多知识点的靶机,超多干货】

    靶机地址:https://www.vulnhub.com/entry/imf-1,162/ 靶机难度:中级(CTF) 靶机发布日期:2016年10月30日 靶机描述:欢迎使用" IMF&qu ...

  6. 前端面试 | JavaScript知识点 | 课程笔记

    前端面试课程笔记 以上方链接内课程内容为主,知识点可能不全面,仅作为自用备忘 Ch3 作用域和闭包 3.1 作用域和自由变量 题目: this的不同应用场景,如何取值? 手写bind函数 实际开发中闭 ...

  7. bind函数作用、应用场景以及模拟实现

    bind函数 bind 函数挂在 Function 的原型上 Function.prototype.bind 创建的函数都可以直接调用 bind,使用: function func(){console ...

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

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

  9. 第 6 章 存储 - 039 - Data Volume 之 bind mount

    Data Volume Data Volume 本质上是 Docker Host 文件系统中的目录或文件,能够直接被 mount 到容器的文件系统中. Data Volume 有以下特点: 1.Dat ...

  10. call、apply、bind的区别?(面试题-JavaScript部分)

    共同点: 可以改变this指向 语法: 函数.call().函数.apply().函数.bind() 不同点: 1. call.apply可以立即执行. bind不会立即执行,因为bind返回的是一个 ...

最新文章

  1. ACL-文件访问控制列表
  2. Jupyter 绘图怎么显示中文
  3. Kinect开发资源汇总
  4. 行业职业病+生活安全事项
  5. python sqlserver 数据操作_python对Excel数据进行读写操作
  6. java 自循环_java自学之:循环问题
  7. mac远程连接linux 服务器桌面by VNC
  8. 【C++笔记】函数的用法:函数的默认参数、占位参数、函数重载
  9. VMware新建虚拟机步骤图解
  10. 【微信小程序】video视频(77/100)
  11. poscms清除html,POSCMS开源内容管理系统 v3.6.0 升级说明
  12. 芬兰的诺基亚发布了可以访问互联网的诺基亚9000 Communicator
  13. 4-3. 统计素数并求和
  14. vue列表的单独展开收起和全部展开收起
  15. 前端如何实现搜索关键字的高亮显示
  16. JS下载图片保存在本地
  17. 跟我一步一步使用VMware安装ubuntu20.04及优化
  18. python语言的变量类型_Python语言变量类型基础学习
  19. 数据库之Timestamp 的用法
  20. 树莓派Python开发:led实验

热门文章

  1. 犀牛书学习笔记(3):函数
  2. Win7下安装Flash低版本
  3. js延时函数setTimeout
  4. (二十二)访问者模式详解(伪动态双分派)
  5. exit()和return的区别
  6. 代码阅读工具-global
  7. Cisco *** 完全配置指南-连载-***概述
  8. 4.企业安全建设指南(金融行业安全架构与技术实践) --- 内控合规管理
  9. 13.Linux/Unix 系统编程手册(上) -- 文件IO缓冲
  10. 18.卷1(套接字联网API)---路由套接字