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

177
Views
"el objeto no es extensible" mientras se accede a través de la función `import()`

Estoy importando mi "módulo" de JavaScript usando la llamada " import() ":

 <!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8"><title>Module</title><style>:root { background: #545454; }</style>
 <script>
 window.addEventListener('load', e => {
 import('./script.js').then(async module => {
 const fn = await module.myFunction();
 fn.whatever();
 });
 });
 </script>
</head>
<body></body></html>

y este es el archivo script.js :

 export async function myFunction() {
 this.whatever = function () {
 console.log('Ok');
 };
 return this;
}

Al ejecutarlo, Google Chrome se queja de que el " object is not extensible " mientras agrega lo que whatever :

 script.js:2 Uncaught (in promise) TypeError: Cannot add property whatever, object is not extensible
 at Module.myFunction (script.js:2:19)
 at module.html:12:33

Entonces, ¿qué está mal y cómo solucionar el problema?

almost 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El module en la devolución de llamada then en esa import() es el objeto de espacio de nombres del módulo para el módulo. Ese es un objeto que crea el motor de JavaScript que tiene propiedades para las exportaciones del módulo. El MNO no es extensible; su propósito es reflejar con precisión las exportaciones del módulo. Si pudiera agregarle propiedades (extenderlo), ya no reflejaría con precisión las exportaciones del módulo.

Cuando llama a module.myFunction() , this durante la llamada se establece en module durante la llamada, que es el objeto de espacio de nombres del módulo no extensible. Entonces la línea this.whatever = ___ en myFunction falla, porque está tratando de crear una nueva propiedad en un objeto no extensible.


Solo como una adición: no está claro qué está tratando de hacer con myFunction , pero podría crear un nuevo objeto que use el MNO como su prototipo y agregarle una propiedad.

 export async function myFunction() {
 const obj = Object.create(this);
 obj.whatever = function () {
 console.log("Ok");
 };
 return obj;
}

No recomendaría hacer eso sin una buena razón (y eliminaría el async a menos que la función use await ), pero funcionaría.

almost 4 years ago · Santiago Trujillo 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!