SORU
25 Ocak 2010, PAZARTESİ


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
10 Ocak 2012, Salı


@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);
}

** *37 41*

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • DroidModderX ROOT Master

    DroidModderX

    14 ŞUBAT 2011
  • Learn Math Tutorials

    Learn Math T

    20 Kasım 2011