Usando estático nas clases de JavaScript ES6

Neste artigo, saberemos como traballar cos membros da clase en Clases ES6, a versión recente de JavaScript Standard. Aprenderemos a crear métodos e propiedades estáticas e tamén, aínda que verá que para o caso das propiedades teremos que ser inútiles dalgún tripe adicional.

En realidade non é o noso obxectivo de introducir O concepto de estático, porque é un motivo de estudo en detalle en artigos anteriores como explicacións de métodos e atributos estáticos. Non obstante, diremos que os membros estáticos das clases en programación orientada a obxectos son atributos e métodos que dependen directamente dunha clase, en lugar de depender dun determinado obxecto. Cando depende da clase, non están asociados a un obxecto, polo que comparten o valor para toda a clase, independentemente das instancias que se crearon.

Xa comentamos que cos recentes Versión de JavaScript ES6 Agora temos clases, aínda que non son exactamente as mesmas que noutras linguas máis tradicionais. No caso de estáticos non hai cambios no concepto, senón por non poder declarar atributos de instancia, non podemos declarar atributos estáticos. Verémolo con calma, aínda que antes de comezar cos métodos estáticos.

Definir métodos estáticos en ES6

Un método estático está construído simplemente indicando a palabra “estática” antes do nome do método que se está a crear. O resto da definición dun método estático sería o mesmo que a definición dun método convencional, con excepción de ter a variable “isto” como normalmente nos métodos.

No seguinte exemplo temos Unha clase chamada “Summario” que ten un método declarado estático, para engadir os valores dunha matriz.

class Sumatorio { static sumarArray(arrayValores) { let suma = 0; for(let valor of arrayValores){ suma += valor } return suma; }}

O método estático depende directamente da clase , de xeito que imos usar a súa propia clase para invocala.

Nota: o feito de non ser capaz de “isto” dentro dun método estático é Porque o método non está invocado en relación con ningún obxecto. Como viches, usamos o nome da clase para invocalo e non un obxecto instantáneo. Como sabes, “isto” ten unha referencia ao obxecto onde se lanzou unha mensaxe (o obxecto sobre o que se invocaba un método). Como un obxecto de invocación, non hai ningún obxecto en “isto”. En principio, poderiamos pensar que “este” será entón “indefinido”, pero o que en realidade é o código da propia clase.

Os métodos estáticos poden servir para moitas cousas. É a razón pola que ás veces úsanse como un caixón de desastres de utilidades que poden ter que ver cunha clase. Pensar en obxectos Ten que ter coidado co que e como se usan. O exemplo pasado de Summararray () non foi moi bo da filosofía da orientación de obxectos, pero no seguinte exemplo temos un método estático un pouco mellor pensamento.

Temos unha data de data que nos serve para crear Datas en JavaScript. É certo que JavaScript xa contén unha clase dada, pero ten a posibilidade de crear datas e tempos e quizais só necesitamos datas e queremos unha serie de utilidades adicionais que non estean incluídas na interface de data orixinal.

No noso exemplo observarás que temos un constructor, que recibe o día, o mes eo ano. Non obstante, na práctica, moitas veces as datas créanse co día actual. A medida que a sobrecarga de métodos en JavaScript non existe e, polo tanto, non podemos sobrecargar aos construtores, poderiamos entregar os métodos estáticos para crear unha especie de data construtora sen parámetros que devolve unha data de obxecto inicializada co día actual.

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); }}

Como se pode ver, o método estático hoxe () é responsable da obtención dos valores actuais, mes e ano e invocando o constructor con tales datos, devolver a obxecto que acaba de ser creado.

Outro exemplo de método estático ou método de clase

Continuamos cun segundo exemplo de método estático ou método de clase. Agora atopámolo dentro do marco dunha clase de coordenadas,

class Coordenada { constructor(x, y) { this.x = x; this.y = y; } static coordenadaOrigen() { return new Coordenada(0,0); }}

No código anterior ten un exemplo de método estático, chamado coordinelorigen (), que volve Unha nova instancia dun obxecto da clase de coordenadas, cos seus brancos XEY é igual a cero.

que é un método de clase, polo que teremos que usar a propia clase para acceder a ela. IV id = “

atributos estáticos de ECMAScript 2015

A definición de propiedades estáticas ou propiedades de clase non é tan directo como a definición de métodos estáticos, xa que en ES6 pode Non definir propiedades como feitas noutras linguas de programación máis tradicionais.

En ECMAScript 2015 (ES6) Temos a limitación de non poder declarar atributos na clase (temos que xerarlles no constructor ou nos métodos). Isto tamén se estende a atributos de clase ou atributos estáticos. Non obstante, sempre pode montar algún mecanismo para logralo.

Por exemplo, no caso de ter atributos de clase estáticos que teñan valores comúns a toda a clase, poderiamos facer uso do getter, colocando o Palabra estática ao definir o método GET.

class Circulo { static get pi() { return 3.1416 }}

Podemos acceder a “pi” coma se fose unha propiedade estática, dependente directamente da clase. Utilizámolo directamente desde o nome da clase:

console.log(Circulo.pi);

Se o que queremos é unha variable estática, que é global para toda a clase, cun valor que non depende das instancias e que pode variar ao longo do tempo, poderiamos facer algo así:

class Test {} Test.variableStatic = 'Algo que guardo en la clase';

Como Javascript está tan permisivo, podemos asociar unha propiedade para a clase simplemente asignando calquera valor. Non me gusta demasiado o exemplo, porque a definición da propiedade estática estaría fóra do código da propia clase e, polo tanto, nunha lectura a ese código que non puidemos entender que esta variable estática é posteriormente creada.

No exemplo típico de crear unha variable estática que ten a conta das instancias creadas a partir dunha clase, poderiamos optar por algo así (que me gusta máis por ter a creación de bens estáticos dentro do constructor).

class Habitante { constructor(nombre) { this.nombre = nombre; if(Habitante.contador) { Habitante.contador++; } else { Habitante.contador = 1; } }}

O problema aquí é que só esta propiedade estática existirá desde a primeira instanciación dun obxecto. Polo tanto, outro exemplo un pouco máis convolto podería ser o seguinte, o que fai uso do Getter e do Setter dos obxectos de 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; } } }

Como podes ver, Habitante.Contact é a nosa propiedade estática, que estaría dispoñible grazas ao Getter e ao Setter coma se fose un atributo normal (só que é estático porque está previsto de “estático”).

en O constructor que facemos uso de habitantes. Con todo, como se fose un atributo normal, só internamente na implementación da clase estas propiedades son realmente calculadas con funcións de obter e establecer.

é un código meramente experimental , pero pode dar unha idea das cousas que se poden facer en JavaScript cando “devolveu” unha pequena lingua. Máis información sobre Obter e establecer neste artigo.

Conclusión sobre membros da clase en ES6

Aprendemos cousas interesantes sobre a creación de membros de clase ou membros estáticos, en clases ES6. Como puides ver, hai algunhas particularidades dadas pola linguaxe JavaScript, que é importante saber.

No seguinte artigo do manual ES6 seguiremos falando de clases, abordando algo tan importante como a herdanza das clases en JavaScript.

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *