Istnieją gotowe skróty (cukier składniowy) do opakowania funkcji @CMS, na które odpowiedziano. (Poniżej, zakładając, że kontekst, który chcesz, to this.tip
.)
Jeśli korzystasz z przeglądarki zgodnej z ECMA-262, wydanie 5 (ECMAScript 5) lub Node.js , możesz użyć Function.prototype.bind
. Opcjonalnie możesz przekazać dowolne argumenty funkcji, aby utworzyć funkcje częściowe .
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Ponownie w twoim przypadku spróbuj tego:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
Ta sama funkcjonalność została również zaimplementowana w Prototype (jakieś inne biblioteki?).
Function.prototype.bind
można zaimplementować w ten sposób, jeśli chcesz mieć niestandardową kompatybilność wsteczną (ale pamiętaj o uwagach).
Do najnowocześniejszego rozwoju (2015) możesz użyć funkcji grubych strzał , które są częścią specyfikacji ECMAScript 2015 (Harmony / ES6 / ES2015) ( przykłady ).
Ekspresja funkcji strzałka (znany także jako funkcję strzałki tłuszczu ) ma krótszy w porównaniu do składni wyrażeń funkcyjnych i leksykalnie wiąże this
wartość [...].
(param1, param2, ...rest) => { statements }
W twoim przypadku spróbuj tego:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Jeśli już używasz jQuery 1.4+, istnieje gotowa funkcja do jawnego ustawienia this
kontekstu funkcji.
jQuery.proxy () : Pobiera funkcję i zwraca nową, która zawsze będzie miała określony kontekst.
$.proxy(function, context[, additionalArguments])
W twoim przypadku spróbuj tego:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
Jest dostępny w Underscore.js, a także lodash, jako _.bind(...)
1 , 2
bind Powiązanie funkcji z obiektem, co oznacza, że przy każdym wywołaniu funkcji wartościąthis
będzie obiekt. Opcjonalnie można powiązać argumenty z funkcją, aby je wstępnie wypełnić, znane również jako częściowe zastosowanie.
_.bind(function, object, [*arguments])
W twoim przypadku spróbuj tego:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
wiązać jquery underscore.js ecmascript-5 prototypejs node.js