Как переместиться с языка на основе объекта на Server Side Node.js JavaScript для больших проектов?

StackOverflow https://stackoverflow.com/questions/4008766

Вопрос

Я решил привыкнуть к использованию JavaScript в качестве моего сервера (я использую Node.js) язык для настройки веб-сервера, создавать Deamons Server и намного больше. Это довольно большой проект, который означает, что я должен привыкнуть к языку и получить оптимальную настройку, прежде чем фактически начинать избегать накладных и ненужных хлопот.

Я искал источники, которые объясняют основы функционального программирования в крупных проектах. К сожалению, большинство источников говорят только о базовом JavaScript, предназначенном для простых трюков в браузере.

Две полезные ссылки, которые объяснили, как работает создание объектов в JavaScript http://howtonode.org/Object-graphs. а также http://howtonode.org/Object-graphs-2..

В конце концов, кажется, что наиболее мудрым создать объект, как:

function MyObject(constructorMemberOne, constructorMemberTwo) {
   this.constructorMemberOne = constructorMemberOne;
   this.constructorMemberTwo = constructorMembertwo;
   this.doSomething = function doSomething() {
       //
   }
}

Теперь я ищу полный ссылку на языку JavaScript. Слишком далеко, https://developer.mozilla.org/en/javascript/reference. кажется, наиболее полным.

Q1: Является ли этот рекомендуемый ссылка на языку Ecmascript? Я спрашиваю в основном, потому что это общается компанией, которая в основном работает в индустрии браузера, но JavaScript не только для браузеров - возможно, есть источники, которые я не знаю.

Во-вторых, я привык создавать новый файл для каждого класса, который я создаю, где имя файла представляет имя класса. Q2: Это рекомендуемая практика в JavaScript (V8, Node.js) тоже? Как бы один «импорт» этот класс?

Это «импорт» приводит меня к моему запутанию о «требовании Node.js». Я знаю, что это не то же самое. Требовать в основном загружать другой файл, который затем имеет свое собственное пространство имен, что означает, что это переменные выходит из объема файла, который требует этого файла. Однако для моих занятий я хочу иметь методы, которые доступны для класса, который «импортирует» (цитаты, как я не уверен, даже возможно ли это) этот класс. Например.:

var utils = require("utils/MainUtils.js");
utils.doSomething();

Насколько я знаю, этот метод doSomething () доступен только в том случае, если он был настроен:

function MainUtils() {
   exports.doSomething = function doSomething() {
      //
   }
}

Q3: это правильно? Разве это не кажется довольно ненормальным?

Q4: Есть ли другие блоги или ресурсы, которые полезны для получения моей настройки, например Howtonode.org?

Наконец, Q5: имели какие-либо усилия, чтобы сделать все это наследование, создание объектов, структуру проекта, наменение и т. Д. Простые для больших проектов? Любые библиотеки или что-то для этой цели?

Надеюсь, мои вопросы ясны. Любая помощь ценится. Спасибо.

Это было полезно?

Решение

Это рекомендуемый ссылка на электросписок языка?

Ну, официальный ссылка на языку Ecmascript - это ЭКМА-262. сам. Но, к сожалению, это совершенно нечитается даже по стандартам стандартов документов.

ECMA не производит никаких материалов, направленных на конечные программисты, и нет ни одного учебника, рассмотренного «Лучшим». Ссылка MDC выглядит приличной, по крайней мере. (Большинство учебных пособий JavaScript абсолютно ужасны и полны ошибок. Что является неисправностью JavaScript наличие так много ... quirky ... Особенности, но все же.)

В конце концов, кажется, что наиболее мудрым создать объект, как:

К сожалению, нет широкого общепринятого способа для реализации системы класса / экземпляра в JavaScript. Многие рамки имеют свои собственные системы, или вы можете заваривать свои собственные. Ваш пример код создает новый экземпляр каждого метода для каждого экземпляра объекта, который вы можете рассмотреть несколько неоптимальных по сравнению с нативным прототипом JS. (Обычно этот подход используется с var that= this в закрытии, чтобы избежать thisПроблемы в коде обратного вызова.) Вам также потребуется тренироваться в том, как вы создаете подклассы и инициализируете их в конструкторах.

Видеть этот вопрос Для обсуждения подходов к классу / экземпляру в JS.

Я привык создавать новый файл для каждого класса, который я создаю

Да, это Java Wart, которую вы не должны доводить до js.

Сохраняйте свои исходные файлы в управляемые куски соответствующих классов и функций. Иногда это будет один публичный класс за файл, чаще не будет.

Как бы один «импорт» этот класс?

Сама js не имеет собственной функциональности импорта. В браузерах вы делаете это, вставляя <script> Теги или evalКод, извлеченный XMLHttpRequest, И приходится позаботиться о том, чтобы сохранить переменные в отдельных пространствах имен вручную. В Node.js и других местах, где вы работаете с Commonjs, вы используете модули и require().

Это правильно?

да.

Разве это не кажется довольно ненормальным?

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

Другие советы

Я придумал после прочтения книги под названием Pro JavaScript Design. Тем не менее, мне сказали, что не очень хорошо думать, как это (частные, публичные, статические и т. Д.) В JavaScript:

var SomeClass = (function() {
    this.prototype.publicStaticMember = "this is a public static variable",

    this.prototype.publicStaticMethod = function() {
        return "this is a public method: cannot access private members/methods, but can access privileged and public members/methods";
    }

    var privateStaticMember = "this is a private static variable";

    function privateStaticMethod() {
        return "this is a private static method: can only access private members/methods";
    }

    //instance part
    return function() {
        this.publicInstanceMember = "this is a public instance variable";

        var privateInstanceMember = "this is a private instance variable";

        this.publicInstanceMethod = function() {
            return "this is a privileged method: can access both public and private members/methods";
        }

        var privateInstanceMethod = function() {
            return "this is a private method: can access both public and private members/methods but is private";
        }
    }
})();

Это было бы создано так:

var someInstance = new SomeClass().("param1", "param2");

Любые комментарии? Должен ли я прочитать другую книгу?

Если вы еще этого не сделали, оформируйте видео от Douglas Crockford. У него есть куча видео, которые говорят о прототиповых аспектах JavaScript.

Google для 'Douglas Crockford Java программирование языкового видео ». Вот ссылка на первую часть в серии: http://video.yahoo.com/watch/111593/1710507.

То определенный Пакет NPM обеспечивает простую еще мощную OOP для JavaScript с поддержкой черт (Mixins) и вложенных классов. Вот пример использования:

var defineClass = require("defineClass").defineClass;

var Person = defineClass({
  cash: 0,
  constructor: function (firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  },

  greet: function (name) {
    console.log("Hello " + name + ". My name is " + this.firstName);
  },

  earn: function (amount) {
    this.cash += amount;
  }
});

var Developer = defineClass({
  _super: Person,

  // override a field default value
  cash: 100,

  // override the constructor
  constructor: function (firstName, lastName, language) {
    // you may have code before the base constructor call

    // call the base constructor
    this._super(firstName, lastName);
    this.language = language;
  }

  // override a method
  greet: function (name) {
    console.log("Hey, " + name + ". I'm " + this.firstName)
  },

  // override a method and call its base method
  earn: function (amount) {
    return this._super(amount * 1.2);
  }
});

Читать дальше в Readme: https://github.com/nodirt/defineclass.

Установка:

$ npm install defineClass
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top