In questo articolo sapremo come lavorare con i membri della classe in classi ES6, la versione recente dello standard JavaScript. Impareremo anche come creare metodi e proprietà statici, anche se vedrai che per il caso delle proprietà dovremo essere inutile di qualche trippa aggiuntiva.
In realtà non è il nostro obiettivo di introdurre Il concetto di statico, perché è un motivo per lo studio in dettaglio negli articoli precedenti come spiegazioni di metodi e attributi statici. Tuttavia, diremo che i membri statici delle classi nella programmazione orientati agli oggetti sono attributi e metodi che dipendono direttamente da una classe, invece di dipendere da un particolare oggetto. Quando dipende dalla classe, non sono associati a un oggetto, quindi condividono il valore per l’intera classe, indipendentemente dalle istanze che sono state create.
Abbiamo già commentato che con il recente Versione di JavaScript ES6 Ora abbiamo lezioni, anche se non sono esattamente le stesse di altre lingue più tradizionali. Nel caso della statica non ci sono cambiamenti nel concetto, ma non essendo in grado di dichiarare attributi di istanza, non possiamo dichiarare attributi statici. Lo vedremo con calma, anche se prima di iniziare con i metodi statici.
Definisci metodi statici in ES6
Un metodo statico è costruito semplicemente indicando la parola “statica” prima del nome del metodo che viene creato. Il resto della definizione di un metodo statico sarebbe uguale alla definizione di un metodo convenzionale, ad eccezione di avere la variabile “questo” come di solito nei metodi.
Nell’esempio seguente abbiamo Una classe chiamata “Summario” che ha un metodo dichiarato statico, per aggiungere i valori di un array.
class Sumatorio { static sumarArray(arrayValores) { let suma = 0; for(let valor of arrayValores){ suma += valor } return suma; }}
Il metodo statico dipende direttamente dalla classe , in modo che utilizzeremo la tua classe per invocarla.
let suma = Sumatorio.sumarArray(); //suma valdrá 12
I metodi statici possono servire per molte cose. È il motivo per cui a volte sono usati come cassetto di disastro di utilità che potrebbero avere a che fare con una classe. Pensando agli oggetti che devi stare attento a cosa e come vengono utilizzati. L’esempio passato di Sumaramarray () non è stato molto buono dalla filosofia dell’orientamento degli oggetti, ma nel seguente esempio abbiamo un metodo statico un po ‘migliore pensiero migliore.
Abbiamo una data di data che ci serve a creare Date in JavaScript. È vero che JavaScript contiene già una determinata classe, ma ha la possibilità di creare date e tempi e forse abbiamo solo bisogno di date e vogliamo una serie di ulteriori utilità che non sono incluse nell’interfaccia di data originale.
Nel nostro esempio osserverai che abbiamo un costruttore, che riceve il giorno, il mese e l’anno. Tuttavia, in pratica, molte volte le date vengono create con il giorno corrente. Poiché il sovraccarico dei metodi in JavaScript non esiste e quindi non possiamo sovraccaricare i costruttori, potremmo consegnare i metodi statici per creare una specie del costruttore della data senza parametri che restituisce una data dell’oggetto inizializzata con il giorno corrente.
class Fecha { constructor(dia, mes, ano) { this.dia = dia; this.mes = mes; this.ano = ano; } static hoy() { var fecha = new Date(); var dia = fecha.getDate(); var mes = fecha.getMonth() + 1; var ano = fecha.getFullYear(); return new Fecha(dia, mes, ano); }}
Come puoi vedere, il metodo statico oggi () è responsabile per ottenere i valori correnti, mese e anno e richiamare il costruttore con tali dati, restituendo il Oggetto che è stato appena creato.
Un altro esempio di metodo statico o metodo di classe
Continuiamo con un secondo esempio di metodo statico o metodo di classe. Ora lo troviamo all’interno del fotogramma di una classe di coordinata,
class Coordenada { constructor(x, y) { this.x = x; this.y = y; } static coordenadaOrigen() { return new Coordenada(0,0); }}
Nel codice precedente hai un esempio di metodo statico, chiamato coordinatedorigen (), che restituisce una nuova istanza di un oggetto della classe di coordinate, con i suoi bianchi Xey uguale a zero.
Questo è un metodo di classe, quindi dovremo usare la classe stessa per accedervi.
var origen = Coordenada.coordenadaOrigen();
Attributi statici di ECMAScript 2015
La definizione di proprietà statiche o proprietà di classe, non è come direttamente come la definizione di metodi statici, poiché in ES6 è possibile Non definire le proprietà come fatte in altri linguaggi di programmazione più tradizionali.
In ECMASCRICT 2015 (ES6) Abbiamo la limitazione di non essere in grado di dichiarare attributi nella classe (dobbiamo generareli nel costruttore o nei metodi). Questo si estende anche agli attributi di classe o agli attributi statici. Tuttavia, è possibile assemblare sempre un meccanismo per raggiungerlo.
Ad esempio nel caso di attributi di classe statica che hanno valori comuni a tutta la classe, potremmo usare il getter, posizionando il Parola statica quando si definisce il metodo GET.
class Circulo { static get pi() { return 3.1416 }}
Possiamo accedere a “PI” come se fosse una proprietà statica, dipendente direttamente dalla classe. Lo usiamo direttamente dal nome della classe:
console.log(Circulo.pi);
Se ciò che vogliamo è una variabile statica, che è globale per l’intera classe, con un valore che non dipende dai istanze e che può variare nel tempo, potremmo fare qualcosa del genere:
class Test {} Test.variableStatic = 'Algo que guardo en la clase';
Come JavaScript è così permissivo, possiamo associare Una proprietà alla classe semplicemente assegnando qualsiasi valore. Non mi piace troppo, perché la definizione della proprietà statica sarebbe al di fuori del codice della classe stessa e quindi in una lettura a quel codice non siamo riusciti a rendersi conto che questa variabile statica è stata successivamente creata.
Nel tipico esempio di creazione di una variabile statica che porta l’account delle istanze create da una classe, potremmo optare per qualcosa di simile (che mi piace di più per avere la creazione di proprietà statiche all’interno del costruttore).
class Habitante { constructor(nombre) { this.nombre = nombre; if(Habitante.contador) { Habitante.contador++; } else { Habitante.contador = 1; } }}
Il problema qui è che solo questa proprietà statica esisterà dalla prima istanziazione di un oggetto. Quindi un altro esempio un po ‘più convolto potrebbe essere il prossimo, che fa uso del getter e del setter degli oggetti JavaScript.
class Habitante { static get contador() { if(Habitante.contadorPrivado) { return Habitante.contadorPrivado; } return 0; } static set contador(valor) { Habitante.contadorPrivado = valor; } constructor(nombre) { this.nombre = nombre; if(Habitante.contador) { Habitante.contador++; } else { Habitante.contador = 1; } } }
Come puoi vedere, Abitant.contact è la nostra proprietà statica, che sarebbe disponibile grazie al getter e al setter come se fosse un normale attributo (solo che è statico perché è previsto da “statico”).
in Il costruttore che utilizziamo abitante.Contatto come se fosse un normale attributo, solo internamente nell’attuazione della classe Queste proprietà sono effettivamente calcolate con le funzioni di ottima e set-calcolata.
è un codice peloso sperimentale , Ma può dare un’idea delle cose che possono essere fatte in JavaScript quando “sei tornato” un piccolo linguaggio. Ulteriori informazioni sull’ottieni e si inserisce in questo articolo.
Conclusione sui membri della classe in ES6
Abbiamo imparato cose interessanti sulla creazione di membri della classe, o membri statici, nelle classi ES6. Come sei stato in grado di vedere, ci sono alcune particolarità fornite dal linguaggio JavaScript, che è importante sapere.
Nel prossimo articolo del manuale ES6 continueremo a parlare di lezioni, affrontando qualcosa di importante come l’ereditarietà delle classi in JavaScript.