在构造函数中,我正在创建一个二维数组,如下所示:
jQuery(function ($, undefined) {
$('body').terminal({
register: function (email, user, pw) {
this.echo("register...")
jQuery.ajax({
url: "https://faf3fg.execute-api.us-west-2.amazonaws.com/api/register/" + email +
'/' + user + '/' + pw,
crossDomain: true,
success: function (result) {
this.echo(data);
console.log(data);
},
async: false
});
}
},{
greetings: 'say',
name: 'sterm',
height: $('body').height(),
width: $('body').width(),
prompt: 'sss> ',
completion: true
});
});
在我this.grid = Array.apply(null, Array(3)).map((el, i) => {
return Array.apply(null, Array(3)).map((el, i) => {
return {
key1: null,
key2: null
};
});
});
之后,我得到一个包含对象和null属性的二维数组。但是,如果我尝试console.log(this.grid)
,在console.log(JSON.stringify(this.grid[0][1]))
上会有未定义的错误
[1]
我了解使用构造函数构造数组与使用Array.apply()之间的一些区别。也许我使用的apply()不正确?
我试图以多种方式构造此数组。从嵌套的for循环中,其中class Grid {
constructor() {
this.grid = Array.apply(null, Array(3)).map((el, i) => {
return Array.apply(null, Array(3)).map((el, i) => {
return {
key1: null,
key2: null
};
});
});
}
}
// used in another external class with require() and instantiated like:
let grid = new Grid();
console.log(grid);
console.log(JSON.stringify(grid[0][1]))
将相同的对象指向第二维,然后每行排列一次网格。
.push()
this.grid = []
for(let i = 0; i < 3; ++i){
let row = []
for( let j =0; j< 3; ++j) {
let obj = {
key1: "property",
key2: "property"
}
row.push(obj);
}
this.grid.push(row);
}
我希望日志在相应的索引处显示对象。但是,class Grid {
constructor() {
this.grid = [];
for (let i = 0; i < 3; ++i) {
let row = [];
for (let j = 0; j < 3; ++j) {
let obj = {
key1: null,
key2: null
};
row.push(obj);
}
this.grid.push(row);
}
}
}
// used in another external class file with a require() and instantiation like so:
let grid = new Grid();
console.log(JSON.stringify(grid[0][1]));
仍然是:
JSON.stringify(this.grid[0][1])
答案 0 :(得分:2)
名为grid
的变量具有名为grid
的属性,它是包含内部数组的外部数组。因此,要引用内部数组,请访问grid.grid
。否则,仅引用grid
即可为您提供实例,而不是外部数组。
class Grid {
constructor() {
this.grid = Array.apply(null, Array(3)).map((el, i) => {
return Array.apply(null, Array(3)).map((el, i) => {
return {
key1: null,
key2: null
};
});
});
}
}
// used in another external class with require() and instantiated like:
let grid = new Grid();
console.log(JSON.stringify(grid.grid[0][1]))
如果实例上有一个方法(例如printGrid
可以打印网格),则可能会更清楚。然后,有意义的是,您将调用grid.printGrid
来打印网格,并且将引用grid.grid
来访问外部数组(而grid
本身显然只是实例)。
为减少这种混乱,您可以考虑使用其他属性名称,例如outerArray
(或其他类名称)。
class Grid {
constructor() {
this.outerArray = Array.apply(null, Array(3)).map((el, i) => {
return Array.apply(null, Array(3)).map((el, i) => {
return {
key1: null,
key2: null
};
});
});
}
}
const gridInstance = new Grid();
console.log(JSON.stringify(gridInstance.outerArray[0][1]))