Stellen Sie sich vor, ich möchte eine Mitgliedsfunktion als Rückruf übergeben.

Was soll ich verwenden, um einen Kontext zu übergeben - bind () oder createDelegate ()?

Ich meine das:

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

Oder dieses:

someObj.on('someEvent', this.someMethod.bind(this));
0
MnZrK 20 Nov. 2013 im 12:53

3 Antworten

Beste Antwort

Die Funktion bind wurde kürzlich zu ECMA-262 (Javascript), 5. Ausgabe, hinzugefügt.

Das createDelegate ist in keiner Edition eine native JavaScript-Methode.

Verwenden Sie also besser bind. Verwenden Sie Polyfill für den Browser wo es nicht implementiert.

P.S. Wenn Sie ein beliebtes Framework verwenden, verfügt es wahrscheinlich über solche Methoden. Zum Beispiel hat jQuery die statische Methode $.proxy, die dasselbe tut.

3
Pinal 20 Nov. 2013 im 09:01

Angenommen, Sie verwenden eine alte Version von ExtJS (z. B. 3.4.0), gibt es kaum Unterschiede zwischen bind und createDelegate. Der große Unterschied besteht darin, dass bind für ältere Browser nicht verfügbar ist.

Zu beachten ist, dass createDelegate in neueren Versionen von ExtJS nicht verfügbar ist, da sich das Framework von der Idee entfernt hat, native Objektprototypen zu ändern. Es wurde durch Ext.Function.bind ersetzt.

*) Es gibt einen Unterschied zwischen dem nativen Function.prototype.bind und Ext.Function.bind, wie die an die Funktion gebundenen Argumente behandelt werden. Es sieht jedoch nicht so aus, als würde es Ihren Code beeinflussen. Lesen Sie die Dokumentation, um den genauen Unterschied zu sehen.

MDN-Link für Function.prototype.bind:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

ExtJS 3.4.0 Link für Function.prototype.createDelegate (hinzugefügt von ExtJS)

http://docs.sencha.com/extjs/3.4.0/source/Ext.html#Function-method-createDelegate

ExtJS 4.0.7 Link für Ext.Function.bind

http://docs-origin.sencha.com/extjs/4.0.7/source/Function2.html#Ext-Function-method-bind

2
Tibos 20 Nov. 2013 im 09:10

Wenn Sie über jQuery sprechen, lesen Sie die Dokumentation (zweiter Parameter eventData).

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

SomeObj:

{

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

}
0
Andrei I 20 Nov. 2013 im 08:59