Из вики-страницы ECMAScript 6, которая будет определять новую версию JS:
Когда вводится область (Block, FunctionBody, Program, ModuleBody и т. д.), переменные, объявленные все незамедлительно содержащиеся объявления функций и классов привязаны к их соответствующим функциям и классам. Затем все тела классов выполняются в текстовом порядке. Тело класса определяет и инициализирует свойства класса один раз, когда оценивается определение класса. Сюда входят свойства функции-конструктора (самого класса) и свойства его прототипа. Эти инициализации происходят в текстовом порядке.
Ваш источник пришел! Свойства объекта JavaScript инициализируются в текстовом порядке для объектов . Массивы не всегда (в настоящее время) всегда следуют этому правилу.
Источник: http://wiki.ecmascript.org/doku.php?id=harmony:classes
Я отредактирую этот пост, когда найду ссылку в ECMAScript 5, хотя я уверен, что он есть.
Изменить: Найден
ECMAScript 5 имеет: http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.3.7 .
Если реализация определяет определенный порядок перечисления для оператора for-in, этот порядок перечисления должен использоваться для упорядочения элементов списка на шаге 3 этого алгоритма.
Это определяет вызовы на
DefineOwnProperty
и, следовательно, положение свойств во внутренней таблице.