Es gibt vorgefertigte Verknüpfungen (syntaktischer Zucker) zum Funktions-Wrapper @CMS, mit denen geantwortet wird. (Unter der Annahme, dass der gewünschte Kontext ist this.tip
.)
Wenn Sie einen Browser verwenden, der mit ECMA-262, 5. Ausgabe (ECMAScript 5) oder Node.js kompatibel ist , können Sie diesen verwenden Function.prototype.bind
. Sie können optional beliebige Funktionsargumente übergeben, um Teilfunktionen zu erstellen .
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Versuchen Sie in Ihrem Fall erneut Folgendes:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
Die gleiche Funktionalität wurde auch in Prototype implementiert (irgendwelche anderen Bibliotheken?).
Function.prototype.bind
kann so implementiert werden, wenn Sie eine benutzerdefinierte Abwärtskompatibilität wünschen (beachten Sie jedoch die Hinweise).
Für innovative Entwicklung (2015) können Sie mit Fett Pfeil Funktionen , die sind Teil der ECMAScript 2015 (Harmonie / ES6 / ES2015) Spezifikation ( Beispiele ).
Ein Pfeilfunktionsausdruck (auch als Fettpfeilfunktion bezeichnet ) hat im Vergleich zu Funktionsausdrücken eine kürzere Syntax und bindet den this
Wert lexikalisch [...].
(param1, param2, ...rest) => { statements }
Versuchen Sie in Ihrem Fall Folgendes:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Wenn Sie jQuery 1.4+ bereits verwenden, gibt es eine vorgefertigte Funktion zum expliziten Festlegen des this
Kontexts einer Funktion.
jQuery.proxy () : Nimmt eine Funktion und gibt eine neue zurück, die immer einen bestimmten Kontext hat.
$.proxy(function, context[, additionalArguments])
Versuchen Sie in Ihrem Fall Folgendes:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
Es ist in Underscore.js sowie in lodash als 1 , 2 verfügbar_.bind(...)
bind Bindet eine Funktion an ein Objekt. Dies bedeutet, dass bei jedem Aufruf der Funktion der Wert vonthis
das Objekt ist. Binden Sie optional Argumente an die Funktion, um sie vorab auszufüllen. Dies wird auch als Teilanwendung bezeichnet.
_.bind(function, object, [*arguments])
Versuchen Sie in Ihrem Fall Folgendes:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
binden jquery underscore.js Ecmascript-5 prototypejs node.js