我不断收到“未捕获的ReferenceError:未定义imgArray”错误

时间:2019-03-31 09:49:39

标签: javascript arrays object

我已经写了一些代码作为对象来淡入和淡出一些图像,只有当我要求构建幻灯片时,我才得到

  

“未捕获的ReferenceError:未定义imgArray”。

任何人都可以帮助我为什么会出现此错误。谢谢。

const slideShow = {
  curIndex: 0,
  imgDuration: 10000,
  slider: document.querySelector('.banner__slider').childNodes,

  imgArray: [
    'images/background/img3.jpg',
    'images/background/img1.jpg',
    'images/background/img2.jpg'
  ],

  buildSlideShow(arr) {
    for (i = 0; i < arr.length; i++) {
      const img = document.createElement('img');
      img.src = arr[i];
      slider.appendChild(img);
    }
  },

  slideShow() {

    function fadeIn(e) {
      e.className = "fadeIn";
    };

    function fadeOut(e) {
      e.className = "";
    };

    fadeOut(slider[curIndex]);
    curIndex++;
    if (curIndex === slider.length) {
      curIndex = 0;
    }

    fadeIn(slider[curIndex]);

    setTimeout(function () {
      slideShow();
    }, imgDuration);
  },
}; 

slideShow.buildSlideShow(imgArray).slideShow();

2 个答案:

答案 0 :(得分:2)

由于出现错误,因为代码中没有imgArray变量。您可以将其更改为:

slideShow.buildSlideShow(slideShow.imgArray).slideShow();

这解决了一个问题,但又造成了另一个问题。 buildSlideShow方法不返回任何内容。因此,.slideShow()方法将再次引发错误。由于imgArrayslideShow对象的属性,因此可以使用 this 关键字。将方法更改为:

buildSlideShow() {

  for (i = 0; i < this.imgArray.length; i++) {
    const img = document.createElement('img');
    img.src = this.imgArray[i];
    slider.appendChild(img);
  }

  return this;
}

buildSlideShow,使用return this返回对象的实例。这样,您可以链接方法。

const slideShow = {
  curIndex: 0,
  imgDuration: 10000,
  // slider: document.querySelector('.banner__slider').childNodes,

  imgArray: [
    'images/background/img3.jpg',
    'images/background/img1.jpg',
    'images/background/img2.jpg'
  ],

  buildSlideShow() {
    console.log("inside buildSlideShow method");
    
    for (i = 0; i < this.imgArray.length; i++) {
      console.log(this.imgArray[i]);
      const img = document.createElement('img');
      img.src = this.imgArray[i];
      //slider.appendChild(img);
    }
    
    return this;
  },
  
  slideShow() {
    console.log("inside slideShow method")
  }
}

slideShow.buildSlideShow()
         .slideShow();

(我已注释掉slider代码)

答案 1 :(得分:0)

imgArray不是全局变量,它是对象slideShow的属性。您应该将slideShow.imgArray传递给函数

slideShow.buildSlideShow(slideShow.imgArray).slideShow();

还要修复b开头缺少uildSlideShow(arr){...}的类型。应该是buildSlideShow(arr){...}