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

  • Exalto_Gamer

    Exalto_Gamer

    15 EKİM 2014
  • funbro1

    funbro1

    11 Aralık 2007
  • Vortez

    Vortez

    27 Temmuz 2009