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

  • Britec09

    Britec09

    4 Mart 2009
  • Engadget

    Engadget

    18 EYLÜL 2006
  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006