如何在类中定义数组长度?获取长度未定义错误
2022-01-20
373
我必须从数组中写入所有参与者,每个参与者都应该在新行上。到目前为止,我有这个代码。
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();
所以,我说的是“for”循环。我该如何定义它的数组长度?无论我做什么,我总是得到这个错误:“未捕获的类型错误:无法读取未定义的属性(读取‘长度’)”。
3个回答
您正在访问
Movie
的
static
(但未定义)属性,而
actors
是在构造新的
Movie
实例时定义的成员属性。
应使用
this
关键字访问
actors
属性,该关键字引用
Movie
实例
。
for (let i = 0; i < this.actors.length; i++) { /* ... */ }
// or
this.actors.forEach((actor) => { /* ... */ });
Zulfe
2022-01-20
改用实例变量。另外,删除
actrs
函数,因为它是不需要的,并且会更改
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();
evolutionxbox
2022-01-20
这里有几件事。您指的是
Movie
。它没有静态字段或方法。您想要的是它的实例。如您所知,执行此操作的正确方法是使用
this
关键字。
我猜您在 for 循环中尝试过它,但它没有工作。这是因为
this
上下文在
function
中不同。为了使其工作,您必须将
Movie.actors.length
更改为
this.actors.length
,然后在声明后绑定该函数:
const boundActrs = actrs.bind(this);
actrs();
这将使其工作。另一种方法是使用箭头函数,它不会更改
this
上下文:
const actrs = () => {
for (let i = 0; i < this.actors.length; i++) {
console.log("test if this actually works");
}
}
但是,这不是干净的代码。我会将其设为私有函数,或者只在
printDetail
中使用 for 循环,而不需要额外的函数。
Ibrahim
2022-01-20