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

346
Vistas
JS Revealing Module Pattern: acceda a variables privadas a través de métodos públicos

creé el módulo txtModule usando el patrón de módulo revelador con jquery,

Quiero imprimir el valor de una etiqueta de entrada en una consola... para ese método de prueba expuesto como público, como se muestra a continuación.

 var txtModule = (function(window,$){ var txt = { topics:{}, test:function(){ console.log(this.input.val()); }, _init:function(){ this._cacheDom(); }, _cacheDom:function(){ this.input = $("input#c_input"); }, } txt._init(); return { test : txt.test, } }); var v = txtModule(window,$); v.test();

cuando ejecuta el método público de prueba cuando intenta acceder a this.input variable de entrada, aparece un error como se muestra a continuación

 Uncaught TypeError: Cannot read properties of undefined (reading 'val')

Quiero saber cómo puedo exponer correctamente el método de prueba al exterior para acceder a this.input

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

0

Llamar txt._init() llena el objeto txt con una propiedad de input , pero luego, cuando lo hace

 v.test();

más tarde, puede ver que el lado izquierdo del archivo . es v - que es el objeto devuelto al final

 return { test : txt.test, }

y no el objeto txt . Cuando hace v.test() , this que ve la función de test es el objeto que solo tiene la propiedad de test .

Depende de si desea que la entrada sea visible externamente o no; de lo contrario, consulte txt ; de lo contrario, cree una variable para el objeto devuelto y consúltelo.

 var txtModule = (function(window,$){ var txt = { topics:{}, test:function(){ console.log(this.input.val()); }, _init:function(){ this._cacheDom(); }, _cacheDom:function(){ returnedObj.input = $("input#c_input"); }, } const returnedObj = { test : txt.test, }; txt._init(); return returnedObj; }); var v = txtModule(window,$); v.test();

Pero esto es algo complicado: tener dos objetos diferentes que recopilan pares clave-valor algo similares hace que las cosas sean confusas. Considere si usar solo uno en su lugar ayudaría, por ejemplo:

 const txtModule = (function (window, $) { const input = $("input#c_input"); const test = () => { console.log(input.val()); }; return { test }; }); const v = txtModule(window, $); v.test();
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