关于 bind 你可能需要了解的知识点以及使用场景
2016-09-11 09:13
603 查看
更多内容: http://blog.yuhai.win
1、 bind 和 call 以及apply 一样,都是可以改变上下文的this指向的。不同的是call和apply一样,直接引用在方法上,二bin绑定this后返回一个方法。
2、案例
3、造成上面问题的原因是 func 在上下文中的this 是window 。 bind 可以改变this指向。bind是function的一个函数扩展方法,bind 以后代码重新绑定了func内部的this指向。
以上代码不兼容ie6-ie8
3、 bind() 方法会创建一个新函数,当这个心函数被调用时,他的this值是传递给bind() 的第一个参数,他的参数是bind() 的其他参数和其原本的参数。
4、使用bind返回的function ,使用 new 操作符调用绑定函数时,bind的第一个参数无效
参考地址: 1、http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651551172&idx=1&sn=0f8364c6902fcac8e22f8ae3fabecd17&scene=0#rd 2、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 你可能需要了解的知识点以及使用场景
- 关于ARC需要了解的一些基本知识点
- 关于 MySQL LEFT JOIN 你可能需要了解的三点
- 关于 MySQL LEFT JOIN 你可能需要了解的三点
- 关于Entity Framework更新的几种方式以及可能遇到的问题(附加类型“Model”的实体失败,因为相同类型的其他实体已具有相同的主键值)在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为
- 关于 MySQL LEFT JOIN 你可能需要了解的三点
- [J2EE]使用 EJB 组件你需要了解些什么呢?--是一些关于使用条件的判断标准
- 关于ARC需要了解的一些基本知识点
- 关于left join你可能需要了解的三点 hr转载
- 关于拦截器与过滤器使用场景、拦截器与过滤器的区别以及配置整理
- GCD 使用中需要注意的细节以及容易混淆的知识点
- 关于 MySQL LEFT JOIN 你可能需要了解的三点
- 关于 MySQL LEFT JOIN 你可能需要了解的三点
- 关于ARC需要了解的一些基本知识点
- 关于 MySQL LEFT JOIN 你可能需要了解的三点(zhuan)
- 关于 MySQL LEFT JOIN 你可能需要了解的三点
- 关于金蝶K3系统(工业)供应链部分,使用前需要基本了解的一些信息
- 关于 MySQL LEFT JOIN 你可能需要了解的三点
- 关于 MySQL LEFT JOIN 你可能需要了解的三点(受益匪浅)
- 关于 MySQL LEFT JOIN 你可能需要了解的三点