Подтвердить что ты не робот

Как я могу разделить код javascript на отдельные файлы?

Я читаю Javascript Guide из Mozilla И когда они сравнивали JS с Java, мне казалось, что Java-код легко разделяется с каждым классом в собственном файле. после дальнейшего поиска, я понимаю, что то же самое можно сделать в JS с расширением namespacing и шаблоном модуля - я испортил его, но очень запутался (особенно при вызове конструктора, объявленного в File1.js в File2.js)

так вот иерархия: class organization

Но я просто не могу понять, как правильно заставить его работать.

как просто перейти из

//employe.js
function Employee () {
  this.name = "";
  this.dept = "general";
}

function Manager () {
  this.reports = [];
}
Manager.prototype = new Employee;

function WorkerBee () {
  this.projects = [];
}
WorkerBee.prototype = new Employee;

function SalesPerson () {
  this.dept = "sales";
  this.quota = 100;
}
SalesPerson.prototype = new WorkerBee;

:

 // employe.js
function Employee () {
  this.name = "";
  this.dept = "general";
}

 // Manager.js   
function Manager () {
  this.reports = [];
}
Manager.prototype = new Employee;

 // WorkerBee.js     
function WorkerBee () {
  this.projects = [];
}
WorkerBee.prototype = new Employee;

 // SalesPerson.js      
function SalesPerson () {
 this.dept = "sales";
 this.quota = 100; 
 }
SalesPerson.prototype = new WorkerBee;
4b9b3361

Ответ 1

У вас должен быть один глобальный объект пространств имен, к которому каждый модуль должен иметь доступ и писать. Измените свои файлы следующим образом:

// employe.js

window.myNameSpace = window.myNameSpace || { };

myNameSpace.Employee = function() {
    this.name = "";
    this.dept = "general";
};

и Manager.js могут выглядеть как

// Manager.js

window.myNameSpace = window.myNameSpace || { };

myNameSpace.Manager = function() {
    this.reports = [];
}
myNameSpace.Manager.prototype = new myNameSpace.Employee;

Это, конечно, очень упрощенный пример. Потому что порядок загрузки файлов и зависимостей не является дочерним. Есть несколько хороших библиотек и шаблонов, я рекомендую вам взглянуть на шаблоны модулей requireJS и AMD или CommonJS. http://requirejs.org/

Ответ 2

Вам не нужно ничего делать по-другому. Просто включите файлы script, и они работают так, как будто это один файл.

Javascript не имеет области действия. После анализа кода не имеет значения, откуда пришел код.

Ответ 3

Для небольших и средних проектов, таких как веб-сайт или игра, наборы имен и конструкторы работают очень хорошо. Они являются плохим выбором, когда порядок загрузки слишком сложный для обработки без какой-либо автозагрузки.

index.html

<script src="Employee.js"></script>
<script src="Manager.js"></script>

Manager.js:

var Manager = function() {
    var employee1 = new window.Employee(this);
    var employee2 = new window.Employee(this);
};

Employee.js:

var Employee = function(boss) {
    // work stuff here
    this.wage = 5;
};

Обратите внимание, что свойства внутри функции конструктора сотрудника видны менеджеру. Слово new сигнализирует конструктор. Это также возможно без конструктора по возврату общедоступных свойств.