Есть готовые ярлыки (синтаксический сахар) для функции-обёртки @CMS, с которой ответили. (Ниже предполагается, что контекст, который вы хотите, есть this.tip
.)
Если вы используете браузер, совместимый с ECMA-262, 5-е издание (ECMAScript 5) или Node.js , вы можете использовать его Function.prototype.bind
. При желании вы можете передать любые аргументы функции для создания частичных функций .
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Опять же, в вашем случае попробуйте это:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
Та же функциональность также была реализована в Prototype (какие-либо другие библиотеки?).
Function.prototype.bind
может быть реализовано следующим образом, если вы хотите обратную совместимость (но, пожалуйста, обратите внимание на примечания).
Для передовых разработок (2015) вы можете использовать функции жирной стрелки , которые являются частью спецификации ECMAScript 2015 (Harmony / ES6 / ES2015) ( примеры ).
Функции стрелка выражение (также известное как жир функция стрелки ) имеет более короткий синтаксис по сравнению с функциональными выражениями и лексический связывает this
значение [...].
(param1, param2, ...rest) => { statements }
В вашем случае попробуйте это:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Если вы уже используете jQuery 1.4+, есть готовая функция для явного задания this
контекста функции.
jQuery.proxy () : принимает функцию и возвращает новую, которая всегда будет иметь определенный контекст.
$.proxy(function, context[, additionalArguments])
В вашем случае попробуйте это:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
Он доступен в Underscore.js, а также в lodash, как _.bind(...)
1 , 2
bind Привязать функцию к объекту. Это означает, что всякий раз, когда функция вызывается, значениемthis
будет объект. При желании можно связать аргументы с функцией, чтобы предварительно заполнить их, что также называется частичным применением.
_.bind(function, object, [*arguments])
В вашем случае попробуйте это:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
привязывать JQuery underscore.js ECMAScript-5 prototypejs Node.js