Есть готовые ярлыки (синтаксический сахар) для функции-оболочки, на которую ответил @CMS. (Ниже предполагается, что вам нужен контекст this.tip
.)
Практически для любой разработки javascript (в 2020 году) вы можете использовать функции жирной стрелки, которые являются часть спецификации ECMAScript 2015 (Harmony / ES6 / ES2015).
Выражение стрелочной функции a> (также известный как функция жирной стрелки) имеет более короткий синтаксис по сравнению с функциональными выражениями и лексически связывает значение this
[...].
(param1, param2, ...rest) => { statements }
В вашем случае попробуйте следующее:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Если вы нацеливаетесь на браузер , совместимый с ECMA-262, 5-е издание (ECMAScript 5) или Node.js, что (в 2020 году) означает все распространенные браузеры, а также старые браузеры, вы можете использовать Function.prototype.bind
. При желании вы можете передать любые аргументы функции для создания частичные функции.
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Опять же, в вашем случае попробуйте следующее:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
Эта же функциональность также была реализована в Prototype (любые другие библиотеки? ).
Function.prototype.bind
можно реализовать следующим образом a > если вам нужна обратная совместимость (но, пожалуйста, соблюдайте примечания).
Если вы уже используете 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);
}
bind jquery underscore.js ecmascript-5 prototypejs node.js
person
Joel Purra
schedule
10.01.2012