带数组的对象
我对 Javascript 还不熟悉,我正在尝试创建内部带有数组的对象。 在 C 中,我可以使用结构轻松解决此问题,但在 Javascript 中,我有点迷茫。这是我的代码:
function Switch() {
var title;
var toggleModeEnable;
};
function Layer () {
sw = [8];
for (j = 0; j < 8; j++) {
sw[j] = new Switch();
};
};
var lr = [10];
for (i = 0; i < 10; i++) {
lr[i] = new Layer();
};
显然,这行不通。 我想要实现的是拥有一个包含 10 个元素的数组 (lr)。每个元素都应该是包含 8 个元素 (sw) 的 ayyay,每个元素都有两个属性 (title 和 toggleModeEnable),并使用以下方式访问它们:
lr[1].sw[3].title
但这样的操作会引发错误,例如:
"Uncaught TypeError: Cannot read property '3' of undefined at :1:9"
我在这里遗漏了什么?
我相信您正在寻找:
function Switch() {
this.title = '';
this.toggleModeEnable = false;
}
function Layer () {
this.sw = [];
for (let j = 0; j < 8; j++) {
this.sw.push(new Switch());
}
}
const lr = [];
for (let i = 0; i < 10; i++) {
lr.push(new Layer());
}
有几件事你应该考虑。
-
首先 ,变量应该使用
let
或const
来定义,而不是var
。使用var
定义变量可能会导致"use strict"
模式下出现问题,如 docs
中所述
-
其次 ,函数应该返回某些内容。
-
第三 ,
Switch
和Layer
函数均不接受参数,因此它们将返回相同的值。 -
第四 ,由于它们是函数,因此您不应使用
new
,除非它们已被定义为对象 - 您只需调用该函数即可。 -
最后 ,因为存储在数组中的对象没有键名称,您只需使用
lr[0][0]
从数组中的第一个对象获取第一个值。
因此,考虑到所有这些,请尝试以下操作:
function Layer (i) {
function Switch(j) {
let title = "aaa." + i + "." + j;
let toggleModeEnable = false;
return {title, toggleModeEnable};
};
let sw = [8];
for (j = 0; j < 8; j++) {
sw[j] = Switch(j);
};
return sw;
};
let lr = [10];
for (i = 0; i < 10; i++) {
lr[i] = Layer(i);
};
console.log(lr[1][3]);
console.log(lr[1][6]);
可以添加参数,让结构更加灵活。
const test = LR(10);
console.log(test);
function LR(length){
const lr=[];
for (let i = 0; i < length; i++){
lr.push(LAYER(8));
return lr;
}
}
function SWITCH(title){
return {
title:title,
toggleModeEnable:false
}
}
function LAYER(size){
const sw=[];
for (let j = 0; j < size; j++) {
sw.push(SWITCH(""));
}
return sw;
}