Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   HTML/DHTML/CSS/JS/VB (http://www.flasher.ru/forum/forumdisplay.php?f=66)
-   -   Нужен совет по подключению классов в JS-проекте (http://www.flasher.ru/forum/showthread.php?t=210645)

mikhailk 14.04.2015 13:11

Нужен совет по подключению классов в JS-проекте
 
В NodeJS есть штатный механизм подключения модулей

Код:

var misc = require('./misc');
Есть необходимость в аналоге для браузерного JS. Есть какое-нибудь готовое опробованное решение?

ЗЫ. Обязательно чтобы отладчик работал. Потому что при сборке на лету некоторыми способами все в целом работает, но тот же FireBug не может показать строчку с ошибкой, если она возникает.

Zebestov 14.04.2015 13:18

Речь идет о произвольном коде или конкретно о NodeJS?
И что подразумевается под "классами"?

mikhailk 14.04.2015 13:38

Речь идет о проекте на чистом JS для работы клиентской части приложения. Если точнее, то там разрабатывается движочек, использующий возможности html5.

Хотелось бы, чтобы в итоге проект выглядел примерно как проект на AS3, т.е., один класс - один файл, в начале каждого файла с классом был указан импорт, все само собирается и биндится. Т.е., примерно как require в NodeJS или require_once в PHP.


Под классами в данном случае подразумевается их реализация на JS.

Код:

function Animal(name) {
  this.speed = 0;
  this.name = name;

  this.run = function(speed) {
    this.speed += speed;
    alert( this.name + ' бежит, скорость ' + this.speed );
  };

  this.stop = function() {
    this.speed = 0;
    alert( this.name + ' стоит' );
  };
};

var animal = new Animal('Зверь');


ЗЫ. Пишу не я, пишет коллега, но я вижу, что он зарылся и не может найти решения. По крайней мере, те решения, которые он нашел к текущему моменту, не подходят.

Zebestov 14.04.2015 13:48

1. Достаточно прописать в <head> все используемые скрипты. Начинать работу следует по факту полной загрузки страницы.

2. Использовать минимизатор, который собирает все отдельные js-файлы в один, который указывается в том же <head>.

P.S.
И да, "классы" немного по-другому имитируются, через прототипы.

Добавлено через 13 минут

Пример объявления "класса":
Код:

// Это наш класс. Конструктор.

var Animal = function(name) {
    this.speed = 0;
    this.name = name;
};

// Это пример статических полей и методов.

Animal.CLASS_DESC = "Животные всякие";
Animal.ping = function() { console.log("Мы тут, пасемся!"); };

// Это методы. Они все будут публичными. Можно как-то намутить
// приватные, но там черт голову сломает, потому нуегонафиг.

Animal.prototype.run = function(speed) {
    this.speed += speed;
    console.log(this.name + ' бежит, скорость ' + this.speed);
};

Animal.prototype.stop = function() {
    this.speed = 0;
    console.log(this.name + ' стоит');
};

Вот этот код нам необходимо загрузить в самом начале описанными выше способами. После загрузки страницы можно уже использовать его:
Код:

console.log(Animal.CLASS_DESC);
var animal = new Animal("Зверь"):
animal.run(10);
animal.stop();


OlmerDale 14.04.2015 14:32

Для отладки гуглите source map, для require browserify.

И привата в js нет. Многие js разработчики приватом называют замыкание.
Они привыкли писать модульно и не создавать больше одного модуля на приложение,
по этому для них замыкание действительно имитирует приват. Но для тех кто создает
более одного модуля, приватная скопа становится общей для всех инстенсов.
Еще есть в шестой версии символ и что-то ещё призванное имитировать приватность..
Но и к таким приватным свойствам можно будет добраться.

mikhailk 14.04.2015 14:44

ок, спс.
посмотрим в эту сторону тоже.

OlmerDale 14.04.2015 14:52

И раз у Вас такие скудные познания в js, то я бы ещё посоветовал посмотреть в сторону препроцесоров babelJS или typescript. Если появятся мысли типа - "я не буду х использоваться, я же программист, я буду на чистом писать". Выкиньте эти мысли из головы.

mikhailk 14.04.2015 15:05

Цитата:

посмотреть в сторону препроцесоров babelJS или typescript
да, это разумно


Кстати, а никто не подскажет нормального форума по JS (в частности по проектам на JS)?
Javascript.ru не предлагать.

OlmerDale 14.04.2015 18:09

Не знаю почему, но сложилось такое мнение, что в as3 люди воспитанные, максимум могут промолчать.
В php наоборот, одни оборотни, которые друг перед другом выделываются и постоянно грызутся, как собачки.
JS же что-то среднее между первым и вторым. На начальном этапе Вам все разжуют и объяснят, но если копнуть чуть глубже то и послать могут, но чаще всего просто скажут, что каждый должен дойти до всего сам.
Но и ругать их нет причин, так как js это бескрайние просторы космоса в котором варятся все у кого нет своего дисплей листа, как это есть у нас. А все языки разные и люди разные и все хотят свою толику внести, что превращает js во вселенную. И если Вы считает что Вам ответят на вопрос "какой фраймворк" или "какой препроцессор лучше", то нет. Как Вам ответить если вряд ли найдется человек, который их все пробовал и сравнивал. В as3 есть Starling и его хватает заглаза и его все и всякому советуют, а в js даже ещё полноценного игрового движка нет. Даже не все режимы наложения в webgl реализованы.

И как заключение можно лишь сказать, что если у Вас нет друга гуру, то приготовьтесь с полгода все свое время потратить на изучение технологий.

Да и сколько нормальных форумов по проектам на as3 Вы знаете? Я таких не знаю.
Или Вы готовы потратить неделю времени на объяснения создавая себе конкурента, которых в js просто миллионы?

mikhailk 14.04.2015 19:02

Цитата:

И как заключение можно лишь сказать, что если у Вас нет друга гуру, то приготовьтесь с полгода все свое время потратить на изучение технологий.
На самом деле, я там в первом посте написал, что на JS пишу не я, а мой коллега. :)
Но я ему обрисую ситуацию.


Часовой пояс GMT +4, время: 01:00.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.