jQuery ha una libreria di funzioni memorizzate in un oggetto interno chiamato fn
. Questi sono quelli che puoi chiamare su ogni oggetto jQuery.
Quando si esegue $("div.someClass")
si ottiene un oggetto jQuery contenente tutti gli elementi <div>
di quella classe. Ora puoi fare $("div.someClass").each(someFunction)
per applicare someFunction
a ciascuno di essi. Ciò significa che each()
è una delle funzioni memorizzate in fn
(uno integrato in questo caso).
Se si estende (aggiungere) il fn
oggetto interno, allora si rendono automaticamente disponibile la funzione personalizzata per la stessa sintassi. Supponiamo che tu abbia una funzione che registra tutti gli elementi nella console, chiamata log()
. È possibile aggiungere questa funzione a $.fn
e quindi utilizzarla come $("div.someClass").log()
.
Ogni funzione aggiunto all'oggetto fn
sarà chiamato in modo tale che all'interno del corpo della funzione, la parola chiave this
punterà l'oggetto jQuery che hai usato.
È prassi comune restituire this
alla fine della funzione personalizzata, in modo che il concatenamento del metodo non si interrompa: $("div.someClass").log().each(someFunction)
.
Esistono diversi modi per aggiungere funzioni all'oggetto $.fn
, alcune più sicure di altre. Uno è piuttosto sicuro:
jQuery.fn.extend({
foo: function() {
this.each(function() { console.log(this.tagName); });
return this;
}
})
Purtroppo il tuo esempio non usa affatto la prototipazione. Questo funziona perché in JavaScript, le funzioni sono oggetti di prima classe e possono essere passati e assegnati come qualsiasi altra variabile. – adamnfish
sì, l'oggetto prototipo esiste su oggetti dichiarati come tali, funziona in modo simile. Potrei avere copia/incolla dal link in basso Object.prototype.inObj = 1; funzione A() { this.inA = 2; } A.prototype.inAProto = 3; B.prototipo = nuovo A; // Collega A alla catena di prototipi di B B.prototype.constructor = B; funzione B() { this.inB = 4; } B.prototype.inBProto = 5; x = nuovo B; document.write (x.inObj + ',' + x.inA + ',' + x.inAProto + ',' + x.inB + ',' + x.inBProto); – Benoit