SORU
5 Temmuz 2011, Salı


_açıklanması gerekir.() bindAll Underscore.js işlev

Bazı backbone.js öğreniyorum ve _.bindAll() kullanıldığı örneklerini çok gördüm. Tüm backbone.js okuyun ve belgelere sayfa ne bir anlamda almak için deneyin underscore.js var, ama ben hala ne kadar çok bulanık. Burada alt çizgi var açıklama:

_.bindAll(object, [*methodNames]) 

Bu yöntemler numarası bağlar nesne, methodNames tarafından belirtilen, bu nesne bağlamında çalıştırılması çağrılan oldukları zaman. Çok kullanışlı gidiyoruz bağlama işlevi için olay işleyicileri olarak kullanılacak başka bir ile çağrılan olurdu bu oldukça işe yaramaz. Hayır methodNames eğer nesnenin tüm sağlanmaktadır fonksiyon özelliklerini bağlanacak .

var buttonView = {
  label   : 'underscore',
  onClick : function(){ alert('clicked: '   this.label); },
  onHover : function(){ console.log('hovering: '   this.label); }
};

_.bindAll(buttonView);

jQuery('#underscore_button').bind('click', buttonView.onClick);
=> When the button is clicked, this.label will have the correct value...

Eğer burada belki de başka bir örnek veya sözlü açıklamasını vererek yardım ederseniz, hiçbir şey mutluluk duyacağız. Daha öğreticiler veya örnekler aramaya çalıştım ama nil ihtiyacım hizmet açın. Çoğu kişi otomatik olarak ne yaptığını biliyor gibi görünüyor...

CEVAP
5 Temmuz 2011, Salı


var Cow = function(name) {
    this.name = name;
}
Cow.prototype.moo = function() {
    document.getElementById('output').innerHTML  = this.name   ' moos'   '<br>';
}

var cow1 = new Cow('alice');
var cow2 = new Cow('bob');

cow1.moo(); // alice moos
cow2.moo(); // bob moos

var func = cow1.moo;
func(); // not what you expect since the function is called with this===window
_.bindAll(cow1, 'moo');
func = cow1.moo;
func(); // alice moos
<div id="output" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

Ne yazık ki gerçek "tüm bağlama" işlevi işlevleri nesne üzerinde sadece çalışır. Bu geçiş için gereken prototip üzerinde tanımlanan bir işlevi vardır _.bindAll() explicitely ek argüman olarak işlev adları.

Neyse, istediğin bir açıklama: Temelde bu fonksiyonu değiştirmek için bir işlev bir nesne ile bir işlevi aynı ada sahip ve davranış, ama aynı zamanda bağlı olan nesne, yani this === theObject bile olmadan aradığı gibi bir yöntem (theObject.method()).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010
  • NextKsa

    NextKsa

    7 EKİM 2009