JavaScript“bind”方法的用途是什么?

JavaScript中的bind()有什么用途

Bind创建一个新函数,该函数将强制函数中的this作为传递给Bind()的参数

下面的示例演示了如何使用bind传递具有正确this的成员方法:

var myButton={
内容:“OK”,
单击(){
log(this.content+“clicked”);
}
};
我的按钮。单击();
var looseClick=myButton.click;
松开单击();//没有绑定,“这”不是我的按钮-这是全局
var boundClick=myButton.click.bind(myButton);
boundClick();//绑定,“这”是我的按钮

打印出:

单击确定
未定义的单击
点击OK

您还可以在第一个(this)参数之后添加额外的参数,bind将这些值传递给原始函数。以后传递给绑定函数的任何其他参数将在绑定参数之后传入:

//显示绑定某些参数的示例
变量和=函数(a,b){
返回a+b;
};
var add5=sum.bind(null,5);
控制台日志(add5(10));

打印出:

15

查看JavaScript函数绑定以获取更多信息和交互式示例

更新:ECMAScript 2015增加了对=&gt函数=&gt函数更紧凑,不会从定义范围更改指针,因此您可能不需要经常使用bind()。例如,如果您希望第一个示例中的按钮上的函数将单击回调连接到DOM事件,则以下都是有效的方法:

var myButton={
…//如上所述
通风孔(元件){
//使用bind()确保“this”是click()中的“this”
element.addEventListener('click',this.click.bind(this));
}
};

或:

var myButton={
…//如上所述
通风孔(元件){
//为“this”使用新变量,因为“this”在函数中
//不会是hookEvent()中的“this”
var me=这个;
addEventListener('click',function(){me.click()});
}
};    

或:

var myButton={
…//如上所述
通风孔(元件){
//=>函数不会更改“this”,因此您可以直接使用它
element.addEventListener('click',()=>this.click());
}
};

发表评论