При разработке JavaScript я обычно разделяю код JavaScript на разные файлы, а затем запускаю сценарий для объединения файлов и сжатия или упаковки полученного файла. В конце концов, у меня есть один файл, который мне нужно включить на мой рабочий сайт.
Этот подход обычно работал, но у меня начались проблемы с наследованием прототипов. В частности, если один класс наследует от другого класса, файл для родительского класса должен быть уже включен, чтобы наследование работало. Если используемый мной сценарий конкатенации просто объединяет каталог, полный файлов, дочерний класс может появиться в коде перед родительским классом. Как это:
parent_class.js
var Namespace = Namespace || {};
Namespace.Parent = function () { };
Namespace.Parent.prototype.doStuff = function () { ... };
child_class.js
var NameSpace = Namespace || {};
Namespace.Child = function () { ... };
Namespace.Child.prototype = new Namespace.Parent();
Единственный способ, которым это работает, - это если parent_class.js включен перед child_class.js, что может не произойти, если скрипт конкатенации помещает дочерний код перед родительским кодом.
Есть ли способ написать этот код так, чтобы функциональность была такой же, но порядок написания кода уже не имеет значения?
Редактировать: Я забыл, что я тоже использую пространства имен, поэтому я добавил это и в код, что может немного изменить ситуацию.