@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 this
değ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ğerininthis
nesne 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