Javascript bind()vs createDelegate()

时间:2013-11-20 08:53:14

标签: javascript extjs

想象一下,我想将成员函数作为回调传递。

我应该使用什么来传递上下文 - bind()或createDelegate()?

我的意思是,这个:

someObj.on('someEvent', this.someMethod.createDelegate(this));

或者这个:

someObj.on('someEvent', this.someMethod.bind(this));

3 个答案:

答案 0 :(得分:3)

bind函数是ECMA-262(Javascript)的第5版;

createDelegate不是任何版本的原生JavaScript方法。

最好使用bind。并将polyfill用于未实现的浏览器。

P.S。如果您使用任何流行的框架,可能它有这样的方法。例如,jQuery具有$.proxy静态方法,可以执行相同的操作。

答案 1 :(得分:2)

假设您使用的是旧版本的ExtJS(例如3.4.0),bindcreateDelegate的作用差别不大。最大的区别在于bind不适用于旧浏览器。

需要注意的一点是,createDelegate在较新版本的ExtJS中不可用,因为框架已经偏离了更改原生对象原型的想法。它已被Ext.Function.bind取代。

*)本机Function.prototype.bindExt.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

的ExtJS 4.0.7链接

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;
    }

}
相关问题