нет. Javascript является прототипом. это означает, что что угодно (любой собственный тип) может быть расширено путем изменения его прототипа. Например, если вы хотите добавить новый метод, который позволяет перебирать любой массив, который вы можете создать позже, вы должны сделать:
Array.prototype.each = function(callback) {
// this == the array. code here...
return this;
};
это означает, что любой созданный массив будет поддерживать .each после: [].each(function(el) {});
. и да, mootools - это сильно прототипная структура НА МОМЕНТ. все меняется с молоком mootools, которое идет AMD - следовательно, не расширяя туземцев ...
в конечном счете, однако, в javascript все наследуется от нативного Object через цепочку прототипов.
что касается Array, это не совсем правильный тип Array - в javascript он больше похож на Object с массивоподобными свойствами. что подводит меня к вопросу, почему у вас проблема:
for (var foo in obj)
на самом деле является способом зацикливания Objects
, а не Arrays
. он работает и с массивами, потому что они как объекты, как я уже упоминал.
но это неправильно, особенно когда вы работаете с прототипом фреймворка или вы не уверены во всем коде, который вы запускаете, и как он повлиял на цепочку прототипов. если вы хотите использовать так называемый «ассоциативный массив» в других языках, просто используйте объект.
В mootools вы можете использовать Object.each(function(value, key) {});
для их итерации.
Или: в цикле проверьте, есть ли у элемента hasOwnProperty :
for (var data in dataArray) {
if (dataArray.hasOwnProperty(data)) {
// avoids working with prototype.
}
}