您的位置:首页 > Web前端 > JavaScript

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

2016-09-11 09:13 603 查看
更多内容: http://blog.yuhai.win

参考地址:

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 js
相关文章推荐