【问题标题】:Can't assign values to properties of object with a "for...in" loop无法使用“for...in”循环为对象的属性赋值
【发布时间】:2015-03-16 19:40:54
【问题描述】:

这是我的对象:

var cornersAbs = {
    topLeftCorner: { x: center.x + orin.corners.topLeft.x, y: center.y + orin.corners.topLeft.y, OOB: false },
    topRightCorner: { x: center.x + orin.corners.topRight.x, y: center.y + orin.corners.topRight.y, OOB: false },
    bottomLeftCorner: { x: center.x + orin.corners.bottomLeft.x, y: center.y + orin.corners.bottomLeft.y, OOB: false },
    bottomRightCorner:{ x: center.x + orin.corners.bottomRight.x, y: center.y + orin.corners.bottomRight.y, OOB: false }
}

还有我的循环

for (var corner in cornersAbs) {
    corner.OOB = corner.x < 0 | corner.y < 0 | corner.x > canvas.width | corner.y > canvas.height;
}

似乎没有为corner.OOB属性分配任何值。

似乎没有任何帮助,即使我这样编写循环:

for (var corner in cornersAbs) {
    cornersAbs.corner.OOB = cornersAbs.corner.x < 0 | cornersAbs.corner.y < 0 | cornersAbs.corner.x > canvas.width | cornersAbs.corner.y > canvas.height;
}

(我尝试以这种方式编写它,因为每次迭代的 console.log(corner) 都会打印“topLeftCorner”、“topRightCorner”等,而不是“cornersAbs.topLeftCorner”等。但是,以这种方式编写循环,给我一个错误,说cornersAbs.corner是未定义的。)

使用括号表示法也无济于事。

当我打印任何corner.OOB 的值时,控制台会打印“false”(我将每个corner.OOB 初始化为的值)或“undefined”。

我已经在corner.x和corner.y中测试了我正在读取的位置,它们工作正常。

【问题讨论】:

标签: javascript javascript-objects for-in-loop


【解决方案1】:

你想做的:

cornersAbs[corner]=...

访问您正在查看的“角落”。

要查看子属性,您可以使用cornerAbs[corner].prop,它索引角引用的属性并查看其中的prop

另一方面,cornerAbs.corner 等价于 cornerAbs["corner"],这不是你想要的。

【讨论】:

  • 您可能需要说明corner 只是属性名称,因此您需要使用cornerAbs[corner] 来访问实际的属性值。关于“为什么”的一点解释可以使答案变得更好。
  • cornersAbs[corner].OOB = ... 成功了。谢谢EyasSH。虽然我不确定为什么全点符号或全括号符号都不起作用。
  • @jfriend00 我提到我已经尝试过 EyasSH 的方法(使用属性的全名)但它对我不起作用,因为我使用了全括号表示法(cornersAbs[corner][OOB])或全点表示法 (cornersAbs.corner.OOB)。仍然不确定为什么我必须使用混杂的符号。
  • @Ben - 你需要cornersAbs[corner].OOBcornersAbs[corner]["OOB"]。括号中的内容是文字字符串或包含字符串的变量名。由于corner 是一个包含字符串的变量,因此您必须为该变量使用方括号。由于OOB 是文字字符串,因此您可以将其中任何一个用于引用的该部分。你不能使用cornersAbs[corner][OOB],因为OOB不是一个定义的变量。
  • 谢谢。现在很有意义。
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2014-12-19
  • 2016-05-02
  • 2015-07-28
相关资源
最近更新 更多