gpt4 book ai didi

javascript - 无法在 Javascript 中询问对象属性两次

转载 作者:行者123 更新时间:2023-11-28 14:44:54 26 4
gpt4 key购买 nike

请原谅我的 JavaScript 代码可能很糟糕。这是我第一次尝试用 javascript 做一些事情...

function Tile (window_id, size)
{
this.window_id = window_id;
this.size = size;
};

function Desktop ()
{
this.tiles = [];
this.ntiles = function () {return this.tiles.length;};
this.size = function ()
{
var sum = 0;
for (i = 0; i < this.ntiles(); i++) {sum += this.tiles[i].size;};
return sum;
};

this.addTile = function (tile)
{
if (this.size() === 1) {return -1;};
this.tiles.push(tile);
return 0;
};
};

function Layer ()
{
this.desktops = [];
this.ndesktops = function () {return this.desktops.length;};

this.addDesktop = function (desktop)
{
this.desktops.push(desktop);
return 0;
};

this.availableDesktopSize = function (size)
{
for (i = 0; i < this.ndesktops(); i++)
{
print(this.desktops[i].size());
print('hi');
print(this.desktops[i].size());
print('hihi');
var space = 1.0 - this.desktops[i].size();
print('hihihi');
print(space);
print(size);
if (space >= size) {return i;};
};
return -1;
};
};

var layer = new Layer();

var desktop1 = new Desktop();
var desktop2 = new Desktop();

var tile = new Tile(100, 0.5);

desktop1.addTile(tile);
desktop1.addTile(tile);
desktop2.addTile(tile);

layer.addDesktop(desktop1);
layer.addDesktop(desktop2);

print(layer.availableDesktopSize(0.51));
print(layer.availableDesktopSize(0.49));

我正在尝试为 Layer 类创建一个方法来查找第一个有足够剩余空间的桌面。为了实现这一目标,在尝试我的代码时,我发现由于某种原因,当我调用desktop.size()属性时,我第一次得到了正确的值,但当我第二次调用它时,我的脚本死了。这是输出

1
hi
TypeError: Result of expression 'this.desktops[i]' [undefined] is not an object.

所以它第一次打印效果很好,但为什么不能在另一次执行完全相同的功能?

(如果您有任何其他建议来改进我的代码,那将非常有帮助)

最佳答案

问题是您在多个循环中使用全局 i 变量。

您从这样的循环中调用一个方法,并且该方法有自己的循环,为同一个i变量提供不同的值。因此,当您从通话中回来时,不再像以前一样。

解决方案:将变量声明为局部变量。

for (let i = 0; // ...etc
// ^^^

关于javascript - 无法在 Javascript 中询问对象属性两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46745251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com