我尝试访问obj中的数组,但是在该对象的同一范围内

时间:2018-01-30 13:26:16

标签: javascript jsdom

let imageObj = {
  imgArr: [
    'dead_battery.jpg', 'evolution.jpg', 'funny_cat_pic.jpg',
    'funny_paper_guys.jpg', 'happy_image', 'wood_garden.jpg'
  ],
  currentImg: 0,
  changeImage: (image) => {
    imageCycle = setInterval((image) => {
        let counter = 0;
        let randomNum = Math.floor(Math.random() * 6);
        image.src = `/images/${imgArr[randomNum]}`;
        console.log('Times Ran: ', counter);
      },
      3000);
  },
  stopImage: (terminate) => {
    if (terminate) clearInterval(imageCycle);
    console.log('INTERVAL STOPPED');
    console.log(imgArr[3]);
  },
  imageCycle: undefined
}

2 个答案:

答案 0 :(得分:1)

使用imgArr将不起作用,因为imgArr不是变量,而是imageObj对象的属性。您可以使用imageObj.imgArr访问函数内的数组。

<强>代码:

let imageObj = {
  imgArr: [
    'dead_battery.jpg', 'evolution.jpg', 'funny_cat_pic.jpg',
    'funny_paper_guys.jpg', 'happy_image', 'wood_garden.jpg'
  ],
  currentImg: 0,
  changeImage: (image) => {
    imageObj.imageCycle = setInterval(() => {
      let counter = 0;
      let randomNum = Math.floor(Math.random() * 6);
      image.src = '/images/' + imageObj.imgArr[randomNum];
      console.log('Times Ran: ', counter);
    },
    3000);
  },
  stopImage: (terminate) => {
    if (terminate) clearInterval(imageObj.imageCycle);
    console.log('INTERVAL STOPPED');
    console.log(imageObj.imgArr[3]);
  },
  imageCycle: undefined
}

答案 1 :(得分:0)

即使Angel Politis的答案在他所说的内容中是正确的,仍然可以通过使用箭头函数来定义您的函数,而是使用{{1 }}关键字然后使用function引用所需的属性。

这将有效

this

但这不会起作用

let obj = {
    arr: ["one", "two"],
    run: function() {
      console.log(this.arr);
    }
}
obj.run();

因此,只需将箭头功能更改为let obj = { arr: ["one", "two"], run: () => { console.log(this.arr); } } obj.run(); 并使用function引用对象,它就可以按预期工作。