SORU
2 EYLÜL 2010, PERŞEMBE


Nasıl bir fonksiyon için bu bağlam geçtim mi?

Bu kolayca google yapabileceğim bir şey olduğunu düşündüm, ama belki de doğru soru soruyorum

Nasıl "bu" verilen bir javascript işlevi ifade eder? her neyse ayarlarım

örneğin, DV fonksiyonları çoğu gibi gibi:

$(selector).each(function() {
   //$(this) gives me access to whatever selector we're on
});

Nasıl uygun bir "bu" başvuru ne zaman aradı? kendi başına fonksiyonlarımı arama/yazma muyum Bunu yapmanın bir WordPress kullanmak özel bir yolu varsa, bu mükemmel olur jQuery kullanıyorum.

CEVAP
2 EYLÜL 2010, PERŞEMBE


JavaScript .call() .apply() yöntemleri ayarlamak için izin verbağlambir işlev için.

var myfunc = function(){
    alert(this.name);
};

var obj_a = {
    name:  "FOO"
};

var obj_b = {
    name:  "BAR!!"
};

Şimdi diyebilirsiniz:

myfunc.call(obj_a);

FOO uyarı. Diğer taraftan, obj_b geçen BAR!! uyarmak olacaktır. .call() .apply() arasında fark .call() eğer işlev için bağımsız değişken yolunuz düşerse virgülle ayrılmış listesini alır ve .apply() bir dizi ihtiyacı var.

myfunc.call(obj_a, 1, 2, 3);
myfunc.apply(obj_a, [1, 2, 3]);

Bu nedenle, kolayca apply() yöntemini kullanarak 18 ** bir işlev yazabilirsiniz. Örneğin, jQuerys .css() yöntem için bir özellik eklemek istiyoruz. Özgün işlev başvurusu deposu, özel kod işlevi üzerine ve kaydedilen fonksiyonu çağırabiliriz.

var _css = $.fn.css;
$.fn.css = function(){
   alert('hooked!');
   _css.apply(this, arguments);
};

arguments sihirli nesne gibi bir dizi olduğundan, sadece apply() geçirebiliriz. Bunu garanti ediyoruz, tüm parametreleri orijinal işlevi geçirilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HER0R

    HER0R

    16 Aralık 2007
  • Max Lee

    Max Lee

    18 AĞUSTOS 2006
  • RFS Dan

    RFS Dan

    22 Temmuz 2014