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

  • bmarian22

    bmarian22

    22 Aralık 2007
  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • Greater Than Gatsby Photoshop Actions & Lightroom Presets

    Greater Than

    11 ŞUBAT 2013