Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

344
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!