variable method estatica es6 classes clase javascript prototype-oriented

method - Cómo declarar una variable estática en Javascript



static method javascript es6 (5)

No existen variables / propiedades de clase estáticas en js. El enfoque más simple es usar la función "clase" como espacio de nombres para variables estáticas.

Significa, simplemente acceda en Person.count directamente.

También puede usar cierres, pero en realidad en 90% de los casos será excesivo. En los navegadores modernos también puede redefinir la función get / setter para ajustar el uso de Person.count y otras variables "estáticas".

Este fragmento demuestra la idea:

function borrow(obj, borrowobj, fname) { obj.__defineGetter__(fname, function() { return borrowobj[fname] }) obj.__defineSetter__(fname, function(val) { borrowobj[fname] = val }) } function Person() { borrow(this, Person, "count"); this.count++ } Person.count = 0; new Person(); new Person(); var p = new Person(); alert(p.count);

Esta pregunta ya tiene una respuesta aquí:

En el siguiente código, me gustaría tener un contador para realizar un seguimiento de la cantidad de objetos Person creados. Este código no lo está haciendo, ¿cómo lo lograría?

function Person(){ this.name = "Peter"; this.counter = this.counter + 1; alert(this.counter); } Person.prototype.counter = 0; var p1 = new Person; var p2 = new Person;


No hay propiedades estáticas Si lo desea, puede almacenar datos en la función de Person .

function Person(){ this.name = "Peter"; Person.counter++; alert(Person.counter); }


Para una estática, puede asignar una propiedad al objeto de función en sí;

Person.counter = 0;

Y dentro del incremento de constructor con;

Person.counter += 1;

También puede verificar si no está definido y crear Person.counter dentro del constructor

function Person(){ if (typeof Person.counter === ''undefined'') Person.counter = 0; else Person.counter += 1; ...


También puede hacer que su variable de contador sea "privada", declarando que es local para un cierre. Es la mejor manera de tener algo similar a privado - variables estáticas:

var Person = (function() { var counter = 0; return function() { counter++; this.name = "Peter"; alert(counter); } })(); var p1 = new Person(); var p2 = new Person();


function Person(){ this.name = "Peter"; Person.counter++; alert(Person.counter); } Person.counter = 0; var p1 = new Person(); var p2 = new Person();

Haga que la variable "estática" sea una propiedad de la función Person , en lugar del prototype , y use Person lugar de this dentro del constructor.

Esto es posible porque las funciones de JavaScript son de primera clase (es decir, son objetos), por lo que pueden tener propiedades propias.

Aquí hay un ejemplo de trabajo del código anterior.