Doğru "bu" bağlam setTimeout geri pas?
Nasıl setTimeout
içine bağlam geçtim mi? this.options.destroyOnHide
sonra 1000 ms this.tip.destroy()
aramak istiyorum. Bunu nasıl yapabilirim?
if (this.options.destroyOnHide) {
setTimeout(function() { this.tip.destroy() }, 1000);
}
Çalıştığımda yukarıdaki this
pencereyi gösterir.
CEVAP
@CMS ile cevap hazır fonksiyonu sarıcı için kısayollar (sözdizimsel şeker) vardır. Varsayarak aşağıda (bağlamı*.* 12) istediğiniz
ECMAScript 5 (current browsers, Node.js ve Prototype.js
browser compatible with ECMA-262, 5th edition (ECMAScript 5) Node.js, hedef Function.prototype.bind
kullanabilirsiniz. İsteğe bağlı olarak herhangi bir fonksiyon değişkenleri partial functions oluşturmak için iletebilirsiniz.
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Yine, senin durumunda, bu deneyin:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
Aynı işlevselliği implemented in Prototype (Diğer kütüphaneler?) olmuştur.
Eğer özel geriye uyumluluk istiyorsanız Function.prototype.bind
can be implemented like this (ama lütfen uyarıları dikkate alınmalıdır).
bir WordPress kullanmak
Zaten açıkça bir fonksiyon this
içerik ayarı için hazır bir fonksiyon var 1.4 dil eklentisi kullanıyorsanız.
jQuery.proxy(): fonksiyon kod, her zaman belirli bir bağlam olacak yeni bir tane Alır.
$.proxy(function, context[, additionalArguments])
Senin durumunda, bu deneyin:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
Underscore.js
_.bind(...)
underscore.js mevcut
bind bir nesneye bir işlev, işlev çağrıldığında,
this
değer nesnesi olacak anlamına gelir Bağlama. İsteğe bağlı olarak, önceden doldurmak onlara işlevi bağlamak argümanlar da kısmi uygulama olarak bilinir.
_.bind(function, object, [*arguments])
Senin durumunda, bu deneyin:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
bind ** underscore.js ecmascript-5 prototypejs *37 41*
Nasıl doğru ActionScript 3 SOAP web se...
's "araçlar:bağlam" And...
Nasıl geri "git --değiştirme"...
Neden "not(True) [False] Doğru mu...
Nasıl Yinele (yani "geri") V...