2010-03-19 11 views
5

Jeśli spojrzymy na najnowsze źródła jQuery na http://code.jquery.com/jquery-latest.js widzimy następujące:Dlaczego jQuery robi to w implementacji funkcji konstruktora?

var jQuery = function(selector, context) { 
    // The jQuery object is actually just the init constructor 'enhanced' 
    return new jQuery.fn.init(selector, context); 
} 

Moje zrozumienie nowego hasła w Javascript jest zasadniczo JavaScript przechodzi funkcja pusty obiekt {} a funkcja ustawia rzeczy na nim poprzez this.blah.

Również z mojego zrozumienia new różni się od .call/.apply itd. Tym, że obiekt powrotu ma również prototyp ustawiony na ten z funkcją. Tak więc wartość zwracana powinna mieć prototyp taki sam jak jQuery.prototype.init.prototype (lub jQuery.fn.init.prototype). Jednak z tego, co widzę, jego prototyp jest ustawiony na jQuery.prototype, a więc wszystkie polecenia dostępne do pracy na planie.

Dlaczego tak jest? Czego mi brakuje w moim rozumieniu?

Odpowiedz

1

Jeśli spojrzeć głębiej jQuery's code, zauważysz tę linię:

// Give the init function the jQuery prototype for later instantiation 
jQuery.fn.init.prototype = jQuery.fn; 

To jest dla celów czytelność/konstrukcji tak konstruktor może mieć swój własny sposób.

Nie ma tu prawdziwej "magii", tylko standardowy JavaScript, choć w nieco mniej popularny sposób. Jest to przydatne w przypadku jQuery, ponieważ biblioteka jest dość długa i dodaje do niej dobrą strukturę/czytelność.

0

W tym pliku źródłowego, szukać napisu „Daj funkcji init prototyp jQuery do późniejszego konkretyzacji” :-)

kod ustawia odwołanie prototype z jQuery.fn.init do jQuery.prototype (który jest taki sam jak jQuery.fn I myśleć).

Powiązane problemy