@CMS'nin yanıtladığı işlev sarıcısına hazır kısayollar (sözdizimsel şeker) vardır. (İstediğiniz bağlamın olduğunu varsayarak this.tip.)
ECMA-262, 5. sürüm (ECMAScript 5) veya Node.js ile uyumlu tarayıcıyı hedeflerseniz kullanabilirsiniz Function.prototype.bind. Kısmi işlevler oluşturmak için isteğe bağlı olarak işlev bağımsız değişkenlerini iletebilirsiniz .
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Yine, sizin durumunuzda şunu deneyin:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
Aynı işlevsellik Prototype'de (başka kütüphaneler?) De uygulanmıştır.
Function.prototype.bindözel geriye dönük uyumluluk istiyorsanız bu şekilde uygulanabilir (ancak lütfen notlara dikkat edin).
Son teknoloji geliştirme (2015) için, ECMAScript 2015 (Harmony / ES6 / ES2015) belirtiminin ( örnekler ) bir parçası olan yağ ok işlevlerini kullanabilirsiniz .
Bir ok işlevi ifadesi ( yağ oku işlevi olarak da bilinir ) işlev ifadelerine kıyasla daha kısa bir sözdizimine sahiptir ve thisdeğeri [...] sözcüksel olarak bağlar .
(param1, param2, ...rest) => { statements }
Sizin durumunuzda şunu deneyin:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Zaten jQuery 1.4+ kullanıyorsanız this, bir işlevin bağlamını açıkça ayarlamak için hazır bir işlev vardır.
jQuery.proxy () : Bir işlevi alır ve her zaman belirli bir bağlama sahip olacak yeni bir işlev döndürür.
$.proxy(function, context[, additionalArguments])
Sizin durumunuzda şunu deneyin:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
Underscore.js'de ve ayrıca lodash'da _.bind(...)1 , 2 olarak kullanılabilir
bind Bir işlevi bir nesneye bağlama, yani işlev her çağrıldığında, değerininthisnesne olacağı anlamına gelir. İsteğe bağlı olarak, kısmi uygulama olarak da bilinen önceden doldurmak için işleve argümanları bağlayın.
_.bind(function, object, [*arguments])
Sizin durumunuzda şunu deneyin:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
bağlamak jQuery underscore.js ECMAScript-5 prototypejs node.js