在我的 js 檔案中,我有一個類幻燈片和一個陣列幻燈片,我用幻燈片類的實體填充它們。稍后在我的代碼中,我使用了一個 for 回圈,在其中迭代幻燈片中的每個元素并嘗試從中獲取特定值。但是,當嘗試運行我的代碼時,我收到以下錯誤訊息:
未捕獲的型別錯誤:slideshows[i].images[slideshows[i].shownImage] 未定義
我的代碼如下所示:
let slideshows = [];
class slideshow{
constructor(images){
this._images = images;
this._shownImage = 0;
}
get images() {return this._images;}
get shownImage() {return this._shownImage;}
set images(images) {this._images = images;}
set shownImage(shownImage) {this._shownImage = shownImage;}
}
// This function is called when the page has loaded in
function setupSlideshow(){
// Create Array of all slideshows
slideshowDivs = document.querySelectorAll("div.slideshow");
for(i = 0; i < slideshowDivs.length; i ){
slideshows.push(new slideshow(slideshowDivs[i].querySelectorAll("slideshow-image")));
}
// Show Active Image
for(i = 0; i < slideshows.length; i ){
slideshows[i].images[slideshows[i].shownImage].style.display = 'block';
// The line above this one triggers the error
}
}
我相信語法不是問題,盡管我對 js 類沒有太多經驗。我唯一能想到的問題可能是 js 不知道 slideshows[i] 屬于幻燈片類,因此不會查看我在課堂上宣告的函式。
編輯:
- 添加了幻燈片的宣告
- 將 slideshowDivs = ... 更改為 slideshowDivs.push(...)
uj5u.com熱心網友回復:
我相信答案與我所追求的路徑不同,因此有了新的答案。
一定是沒有影像slideshows[i].shownImage。我希望這會導致索引越界例外,而不是你得到的,但你能看到如果slideshowDivs[i].querySelectorAll("slideshow-image")什么都不回傳,那么幻燈片將在沒有影像的情況下創建,因此當你查詢影像中的索引時,它一無所獲?我認為這就是問題所在。
因此,你應該有一個條件陳述句,一個 if 陳述句,它說
if (slideshowDivs[i].querySelectorAll("slideshow-image")) != null){
slideshows.push(new slideshow(slideshowDivs[i].querySelectorAll("slideshow-image")));
}
uj5u.com熱心網友回復:
slideshows[i].shownImage應該是 type int,否則不能作為索引在slideshows[i].images. 我不是說它不是一個int,只是確保它是。并且:我知道您沒有在 JavaScript 中定義型別。但是,如果您暗示它是 aString或某物,它就不能像 aString和int兩者一樣。
其次,slideshows =... 應該是slideshows.push(... 這意味著 thatslideshows是一個陣列并相應地對待它。
第三,slideshows從未定義。你應該說var slideshows = []。我想說,這是它的根源,除非您在此處未顯示的代碼中在其他地方定義它。如果您確實在其他地方定義了它,那么問題可能是您沒有push像對陣列那樣做。
編輯:它現在定義,由 OP 修復。編輯:# 2 現在已修復。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532202.html
