JS.Class: portiamo in Javascript i vantaggi di Ruby

di: Alberto Bottarini     25 Agosto 2008

Method binding

Una delle funzionalità più interessanti di Js.Class è il cosiddetto method binding, ovvero la possibilità di creare rapidamente riferimenti ad un metodo all'interno del proprio contesto di esecuzione. Ritornando al concetto degli scope, uno degli errori frequenti è quello di assegnare ad una callback di un evento il metodo di un oggetto JavaScript; metodo che però verrà invocato in uno scope differente rispetto a quello che il programmatore si aspetta.

Grazie al method binding, e in particolare al metodo method() è possibile superare questo ostacolo:

var Email = new Js.Class({
	initialize: function(from, to, text) {
		this.from = from;
		this.to = to;
		this.text = text;
	},
	read: function() {
		alert(this.from + "--->" + to + ": " + this.text);
	}
});
var myEmail = new Email("pippo@disney.com","topolino@disney.com","Ciao come stai??");
var button = document.createElement("button");
button.innerHTML = "(don't) Read Email";
button.onclick = myEmail.read;
var button2 = document.createElement("button");
button.innerHTML = "Read Email";
button.onclick = myEmail.method("read");

In questo caso la pressione del primo pulsante stamperà una stringa di questo tipo "undefined ---> undefined: undefined" perchè, come è stato piu volte ripetuto nei precedenti articoli, il metodo read non viene eseguito all'interno dell'oggetto myEmail, ma bensì dell'oggetto button. Utilizzando invece il metodo method() è possibile forzare lo scope del metodo.

Grazie al metodh binding è possibile assegnare metodi di classi particolari come callback di eventi gestiti dall'utente senza ricorrere a hack o a ulteriori librerie.

Il method binding è disponibile anche per metodi statici.

Hooks

Con il termine hooks (in italiano uncini) identifichiamo dei particolari metodi che vengono invocati automaticamente quando si verifica un particolare evento nella definizione di una classe. Js.Class presenta tre diverse tipologie di hooks. Tutti e tre i metodi vengono invocati automaticamente ricevendo come parametro la classe che ha scatenato l'evento.

Il primo è il metodo statico inherited() che viene invocato automaticamente quando la classe viene ereditata da qualche altra classe. 

Il secondo hook è il metodo included(). Questo metodo, implementabile per i moduli, viene invocato quando una classe include un modulo. 

Il terzo ed ultimo hook, extended(), è molto simile al precedente e viene invocato quando una particolare classe viene utilizzata per estenderne un'altra.

I contesti di utilizzo di questi particolari metodi sono abbastanza rari: spesso si utilizzano per funzioni di debug o di logging e per funzionalità di introspezione.

Guide JavaScript

Guida Node.js

Il framework che permette di per usare V8, l'interprete JavaScript...

Canvas, guida ai framework

Canvas, tra gli elementi di HTML5 è forse quello di maggior impatto....

Guida jQuery UI

Creare siti ricchi e dinamici con jQuery UI, il progetto ufficiale...

Altre guide

Newsletter @JavaScript

Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Webmaster base

18 Giugno 2012 a Milano
Disponibilità: 6 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso JQuery e Ajax per Webmaster

03 Luglio 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti

Corso Webmaster base

11 Giugno 2012 a Roma
Disponibilità: 7 Posti