Існують готові ярлики (синтаксичний цукор) до обгортки функції @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);
}
Така ж функціональність була реалізована і в прототипі (будь-які інші бібліотеки?).
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
прив'язує Прив'язує функцію до об'єкта, тобто, щоразу, коли функція викликається, значеннямthis
буде об'єкт. За бажанням, прив’яжіть аргументи до функції, щоб попередньо їх заповнити, також відомий як часткове застосування.
_.bind(function, object, [*arguments])
У вашому випадку спробуйте це:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
зв’язувати jquery underscore.js ecmascript-5 прототипи node.js