Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

189
Vistas
¿Cómo fuerzo el uso de un método para asignar variables de clase en Javascript?

Estoy creando una clase en Javascript (Nota: en realidad estoy usando Google Apps Script, pero esta debería ser una pregunta genérica de Javascript).

Dentro de la clase hay una matriz de objetos, específicamente una matriz de otra clase que he declarado. Quiero asegurarme de que la matriz contenga SOLO instancias de mi clase.

Aquí está lo básico de lo que tengo:

 class subClassA { constructor(name) { this.name = name; this.mode = new Modes; //Creates instance of another custom class (not shown here) Object.seal(this); //Prevents adding new or removing any extensions to object without editing this class } } class subClassACollection { constructor() { this.array = []; Object.seal(this); //Prevents adding new or removing any extensions to object without editing this class return this.array; //Returns the array when used in formulas rather than the object } } class class1 { constructor(name) { this.name = name; this.mode = new Modes; this.collection = new subClassACollection; Object.seal(this); //Prevents adding new or removing any extensions to object without editing this class } addtoCollection(sca) { if (sca instanceof subClassA) { this.collection.push(subClassA); } else if (typeof sca == "string") { this.collection.push(new subClassA(sca)); } else { //Incomplete, should generate an error or message to user here } } }

Lo que quiero hacer es forzar el uso del método '.addtoCollection' para agregar otro objeto subClassA a la colección/matriz para garantizar que solo se puedan agregar instancias de objetos subClassA y nada más.

Tenía la esperanza de hacer que la matriz fuera de su propia clase, eso la enterraría en una capa profunda y no la haría accesible. Pensé que usar la declaración de return anterior haría que devolviera la matriz para leer los valores sin que sea modificable desde el exterior. Para mi sorpresa, simplemente puedo hacer una asignación como class1.collection = 'hi' que agrega una cadena o cualquier otra variable o tipo de objeto a la matriz/colección. ¡No quiero ser capaz de hacer eso! Quiero asegurarme de que lo único que se puede agregar a esa matriz sea del tipo subClassA . ¿Cómo logro eso con una clase?

NOTA: he visto cómo hacer esto con una función, pero quiero hacerlo completamente dentro de la clase si es posible, por lo que estas propiedades son inherentes a las variables que estoy creando, en lugar de asignar una salida de función a otra variable. Si se puede hacer con un método dentro de la clase, está bien, pero no sé cómo mantener las variables dentro del método "vivas" para la próxima llamada (similar a un método estático en C).

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

En general, JavaScript no tiene características de seguridad como esta. Habiendo dicho eso, recientemente obtuvimos campos privados , por lo que si eso es compatible con su entorno, debería poder proteger su matriz de collection de esa manera.

 class Collection { #array; constructor() { this.#array = [] } add (thing) { if (isOK(thing)) this.#array.push(thing) } get (index) { return this.#array[index] } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Desea crear un getter/setter. la colección debe ser un getter/setter.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda