Javascript bind() vs createDelegate()

Javascript bind() vs createDelegate()

本文关键字:createDelegate vs bind Javascript      更新时间:2023-09-26

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

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

我的意思是,这个:

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

或者这个:

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

bind函数是ECMA-262(Javascript)第5版的最新添加;

createDelegate在任何版本中都不是本机JavaScript方法。

所以最好使用bind。并在浏览器未实现的地方使用polyfill。

附言:如果你使用任何一个流行的框架,它可能有这样的方法。例如,jQuery有$.proxy静态方法,它们也做同样的事情。

假设您使用的是旧版本的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-方法createDelegate

用于Ext.Function.bind 的ExtJS 4.0.7链接

http://docs-origin.sencha.com/extjs/4.0.7/source/Function2.html#Ext-函数方法绑定

如果您谈论jQuery,请查看文档(第二个参数eventData

someObj.on('someEvent', {me: this}, this.someMethod);

someObj:

{
    someMethod: function(eventData){
      var me = eventData.me;
    }
}