什么's将别名绑定到本地方法的优点
What's the advantage of binding an alias to a local method?
我正在处理VirtualJoycle的源代码,我对方法绑定感到困惑:
__bind = function(fn, me){return function(){return fn.apply(me, arguments); }; };
this._$onTouchStart = __bind(this._onTouchStart , this);
接下来它创建一个eventListener:
this._container.addEventListener( 'touchstart' , this._$onTouchStart , false );
指的是后来定义的一种方法:
VirtualJoystick.prototype._onTouchStart = function(event)
{
if( event.touches.length != 1 ) return;
event.preventDefault();
var x = event.touches[ 0 ].pageX;
var y = event.touches[ 0 ].pageY;
return this._onDown(x, y)
}
这对我来说似乎很复杂。为什么要在创建eventListener之前绑定别名?
因为否则它将被调用,this
等于全局对象(或在严格模式下为null
)。
如果你做也会发生同样的情况
var temp = this._onTouchStart;
temp();
通常,任何时候"别名"一个方法,即不要直接将其作为方法调用(点后面有适当的对象),都会丢失它的this
上下文。将方法作为参数传递正是这种别名,这就是为什么addEventListener
需要这样做的原因。
__bind
或其标准版本Function.prototype.bind绕过了这一点,确保使用所需的this
指针调用函数。它创建了一个始终使用绑定this
调用的函数版本,而不是上下文确定的版本。
相关文章:
- 将对象的方法绑定到元素的事件
- 将类方法绑定到类外绑定的事件处理程序内的AJAX成功回调
- bind():您正在将一个组件方法绑定到该组件.React会自动为您执行此操作
- JS方法绑定与2个不同的这个
- backbonejs:不能调用未定义的方法“绑定”
- 将所有方法绑定到“this”
- 内联方法绑定是一种不好的做法
- 如何使用 jQuery 和静态页方法绑定控件数据
- 如何在 javascript 中正确地将绑定切换到 on 或 live
- 如何测试Backbone.js视图是否正确地取消绑定()和destroyed()
- 在Javascript中,有没有一种简洁的方法可以将方法绑定到对象
- 如何将多个方法绑定到单个事件
- 监视一个方法与西农.方法绑定到事件侦听器.方法已执行,但.calledOnce为false
- Javascript OOP:将方法绑定到事件处理程序
- “this"当方法绑定到事件侦听器时未定义
- 如何将参数传递给绑定方法?绑定与匿名方法
- 将c++的虚方法绑定到具有覆盖能力的js中
- Backbone.js集合方法绑定
- 在加载angular之前,怎样才能正确地防止绑定和指令在瞬间可见呢?
- 为什么我必须为React组件类中定义的方法绑定(this),而不是在常规ES6类中