我正在尝试访问 obj 内的数组,但在该对象的相同范围内
I'm Trying to access an array inside an obj but while in the same scope of that object
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
}
使用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
}
即使 Angel Politis 的回答是正确的,另一种访问对象属性的方法是 而不是 使用箭头函数来定义你的函数,而是使用 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
并使用 this
引用对象,它应该会按预期工作。
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
}
使用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
}
即使 Angel Politis 的回答是正确的,另一种访问对象属性的方法是 而不是 使用箭头函数来定义你的函数,而是使用 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
并使用 this
引用对象,它应该会按预期工作。