Странное поведение в JavaScript улучшено для … в цикле

Это могло бы быть случаем, где CSLA применим. Это было разработано для оказания сложной поддержки отмены объектам в приложениях Windows Forms.

32
задан Spencer 11 December 2009 в 01:37
поделиться

4 ответа

Я, вероятно, возьму flak для этого, но да, C # по большому счету ответ Microsoft на Java. Это язык, который они могут расширить любым способом по своему выбору (в отличие от Java, где их осуждали за его расширение неутвержденными способами). Он имеет важные особенности Java: управление памятью и большая системная библиотека. Он похож на C ++ или похож на C в той мере, в какой это необходимо, чтобы соблазнить разработчиков C ++ и C, которые еще не являются поклонниками Java.

Я бы рекомендовал вам использовать метод hasOwnProperty , чтобы гарантировать, что свойство существует в самом объекте, а не где-то в цепочке прототипов:

for (var name in object) {
  if (object.hasOwnProperty(name)) {
    //
  }
}
87
ответ дан 27 November 2019 в 19:58
поделиться

похоже, вы пытаетесь получить доступ к свойствам объекта по имени, а не по значению здесь. индекс, в данном случае «0», присваивается «a» в цикле for / in.

то, что вы хотите сделать, это получить доступ к значению элемента массива, например :ctors [a].

попробуйте следующее:

for(var a in actors) { // a=0 the first time around the loop,  
    actor = actors[a]; // same thing as actors[0];
    actor.xpos += actor.xvel;
    actor.ypos += actor.yvel;
}
4
ответ дан 27 November 2019 в 19:58
поделиться

for (x in y) конструкция выполняет итерацию по индексам массива, а не по его элементам.

2
ответ дан 27 November 2019 в 19:58
поделиться

Попробуйте использовать актеры [a] .xpos вместо только a.xpos .

Подробнее о циклах for-in в JavaScript см. Здесь.

2
ответ дан 27 November 2019 в 19:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: