bind;
在创建函数的时候,定义好函数的this指向,然后函数的this指向不因任何外部环境而改变;
函数的this指向 , 函数的调用者;
var obj = {
name:"obj",
a : function(){
console.log(this);
}
}
obj.a(); //this => obj;
var fn = obj.a;
fn(); // this => window;
同一个函数因为调用者的不同,this的指向是会发生改变的;
this 谨慎使用;
bind => 让函数的this 不会发生改变; 变成固定值;
*** bind 只能用在匿名函数上!!
var fn = function (){
console.log(this);
}.bind({});
fn();
var obj = {
a : function(){
console.log(this);
}.bind({a:1})
}
obj.a();// this => obj;
var fn = obj.a;
fn(); // this => window;
bind根据前面的函数创建了一个新函数返回出来;这时候我们赋值给 fn 的函数是bind创建的新函数;
var obj = {
fn : function(){
// fn1 ;
return function(){
// fn2;
}
}
}
var a = obj.fn();
相当于给a赋值了 obj 中 fn 函数的返回值;
bind 还可以定义参数;
var fn = function(a,b,c){
console.log(a,b,c)
}.bind({},1,2,3)
fn(456,1234563,123456);
bind定义的值,其余任何方法方式都没办法改变