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

  • DavideoDesign

    DavideoDesig

    24 NİSAN 2006
  • Jonathan Leack

    Jonathan Lea

    26 ŞUBAT 2007
  • MovieZoneET

    MovieZoneET

    22 Aralık 2009