Tengo que escribir todos los actores de la matriz, cada uno debe estar en la nueva línea. Hasta ahora tengo este código.
class Movie { constructor(movieName, releaseDate, actors) { this.movieName = movieName; this.releaseDate = releaseDate; this.actors = actors; } printDetail() { console.log(this.movieName); console.log(this.releaseDate); function actrs() { for (let i = 0; i < Movie.actors.length; i++) { console.log("test if this actually works"); } } actrs(); } } let movie1 = new Movie("moviename", "releasedate", ["John Jackies", "Jack Johnies"]); movie1.printDetail();Entonces, estoy hablando del ciclo "para". ¿Cómo puedo definir la longitud de la matriz? Haga lo que haga, siempre aparece este error: "Error de tipo no detectado: no se pueden leer las propiedades de undefined (leyendo 'longitud')".
Está accediendo a una propiedad static (pero no definida) de Movie , mientras actors es una propiedad de miembro definida cuando se construye una nueva instancia de Movie .
Se debe acceder a la propiedad de los actors mediante la palabra clave this , que se refiere a la instancia de la Movie .
for (let i = 0; i < this.actors.length; i++) { /* ... */ } // or this.actors.forEach((actor) => { /* ... */ });Utilice la variable de instancia en su lugar. Además, elimine la función actrs ya que no es necesaria y cambia el valor de this .
class Movie { constructor(movieName, releaseDate, actors) { this.movieName = movieName; this.releaseDate = releaseDate; this.actors = actors; } printDetail() { console.log(this.movieName); console.log(this.releaseDate); for (let i = 0; i < this.actors.length; i++) { console.log("test if this actually works"); } } } let movie1 = new Movie("moviename", "releasedate", ["John Jackies", "Jack Johnies"]); movie1.printDetail();Algunas cosas aquí. Te refieres a la Movie . Que no tiene campos o métodos estáticos. Lo que quieres es tu instancia de ello. La forma correcta de hacer esto, como sabes, es usando la palabra clave this .
Supongo que lo intentaste en tu ciclo for, pero no funcionó. Esto se debe a que this contexto es diferente en una function . Para que funcione, deberá cambiar Movie.actors.length a this.actors.length y luego vincular la función después de su declaración:
const boundActrs = actrs.bind(this); actrs(); Esto hará que funcione. Una alternativa es usar una función de flecha, que no cambia this contexto:
const actrs = () => { for (let i = 0; i < this.actors.length; i++) { console.log("test if this actually works"); } } Sin embargo, este no es un código limpio. Haría de esto una función privada, o simplemente tendría el bucle for en printDetail sin la función adicional.