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

  • ImBluecams

    ImBluecams

    25 Kasım 2012
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009
  • Tips On Linux

    Tips On Linu

    26 Temmuz 2008