想象一下,我想将成员函数作为回调传递。
我应该使用什么来传递上下文 - bind()或createDelegate()?
我的意思是,这个:
someObj.on('someEvent', this.someMethod.createDelegate(this));
或者这个:
someObj.on('someEvent', this.someMethod.bind(this));
答案 0 :(得分:3)
bind
函数是ECMA-262(Javascript)的第5版;
createDelegate
不是任何版本的原生JavaScript方法。
最好使用bind
。并将polyfill用于未实现的浏览器。
P.S。如果您使用任何流行的框架,可能它有这样的方法。例如,jQuery具有$.proxy
静态方法,可以执行相同的操作。
答案 1 :(得分:2)
假设您使用的是旧版本的ExtJS(例如3.4.0),bind
和createDelegate
的作用差别不大。最大的区别在于bind
不适用于旧浏览器。
需要注意的一点是,createDelegate
在较新版本的ExtJS中不可用,因为框架已经偏离了更改原生对象原型的想法。它已被Ext.Function.bind
取代。
*)本机Function.prototype.bind
和Ext.Function.bind
之间存在一些差异,如何处理绑定到函数的参数。但是,它看起来并不会影响您的代码。阅读文档以了解确切的区别。
Function.prototype.bind
的MDN链接:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
Function.prototype.createDelegate
的ExtJS 3.4.0链接(由ExtJS添加)
http://docs.sencha.com/extjs/3.4.0/source/Ext.html#Function-method-createDelegate
Ext.Function.bind
http://docs-origin.sencha.com/extjs/4.0.7/source/Function2.html#Ext-Function-method-bind
答案 2 :(得分:0)
如果您谈论jQuery,请查看documentation(第二个参数eventData
)
someObj.on('someEvent', {me: this}, this.someMethod);
someObj中:
{
someMethod: function(eventData){
var me = eventData.me;
}
}