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

  • Khan Academy

    Khan Academy

    17 Kasım 2006
  • PhoneBuff

    PhoneBuff

    10 HAZİRAN 2011
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008