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í:
- Variables estáticas en JavaScript 37 respuestas
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.