Javascript bind() 方法
而 call() 和 apply() 用于通过手动传递来调用具有特定上下文的函数或者以数组形式提供参数,bind() 方法有不同的用途。
何时使用bind()
当您需要创建具有预定义上下文的新函数以供以后调用时,应使用 bind() 方法。这在事件处理和异步回调中特别有用。
与 call() 和 apply() 的比较
与立即执行的 call() 和 apply() 不同函数,bind() 返回一个新函数。这个新函数在执行时会将原始函数的上下文设置为绑定对象。
考虑以下示例:
var obj = { x: 81, getX: function() { return this.x; } }; // Bind the function to the object 'obj' var boundGetX = obj.getX.bind(obj); // Later, invoke the bound function with the desired context alert(boundGetX());
在这种情况下,boundGetX 函数维护obj 对象的上下文,即使是异步调用或在回调中调用也是如此。
事件中的使用处理
处理事件时,通常希望维护特定对象的上下文。使用bind(),可以确保事件处理程序在执行时具有正确的上下文。
function MyObject(element) { this.elm = element; element.addEventListener('click', this.onClick.bind(this), false); }; MyObject.prototype.onClick = function(e) { // 'this' refers to the MyObject instance // Perform some action... };
通过将onClick函数绑定到MyObject实例,可以保证当点击事件发生时,其中的this关键字事件处理程序将引用 MyObject 实例。
实现详细信息
简化的实现bind() 可能看起来像这样:
Function.prototype.bind = function(ctx) { var fn = this; return function() { fn.apply(ctx, arguments); }; };
以上是什么时候应该使用JavaScript的bind()方法?的详细内容。更多信息请关注PHP中文网其他相关文章!