Похоже, что есть недостающий код.
var M = [];
Назначает новый массив переменной M
, которая, кажется, глобальная переменная (но, вероятно, это не так, вы просто не показали достаточно кода, чтобы правильно определить контекст).
haveComponents: function() {
Это, как представляется, быть частью литерала объекта, который присваивает функции к свойству называется haveComponents
.
var a = 0;
Создает локальную переменную a
и когда код выполняется, присваивает ему значение 0
.
for (var n in this.M) a++;
Создает локальную переменную n
и последовательно присваивает ему имя перечислимого свойства любых this.M
ссылок. Если является глобальным объектом, то M
будет массивом, инициализированным выше. Если нет, это может быть или не быть чем-то другим. У вас не было другого задания, или у которого установлено значение this
.
Для каждого перечислимого свойства M
(который включает в себя его наследуемые свойства) a
будет увеличиваться на единицу.
return a > 0;
}
Возвращает true
если a
больше нуля.
Эквивалентная функция:
haveComponents: function() {
for (var n in this.M) {
// this.M has at least one enumerable property
return true;
}
// this.M has no enumerable properties
return false;
}
или для пуристов:
haveComponents: function() {
var hasEnumerable = false;
for (var n in this.M) {
hasEnumerable = true;
break;
}
return hasEnumerable;
}
Ссылка на ['for ... in'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/for...in) loop –
Я думаю, что вы «мы оставили некоторые важные части кода, вы должны сообщить нам, что это такое (например, какой объект« hasCompoenents »вызывается как метод). – RobG
Либо это какой-то странный/плохой код, либо вы исключаете некоторые ключевые части. 'HasComepnents' кажется свойством объекта, но' M' является переменной. И 'M' является массивом, он будет включать перечисляемые унаследованные свойства * (что может быть точкой) *. –