Comment passer de la langue en fonction de l'objet à côté serveur Node.js Javascript pour les grands projets?

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

Question

J'ai décidé de se habituer à utiliser Javascript que mon serveur face (j'utilise Node.js) langue pour configurer un serveur Web, créez deamons serveur et beaucoup plus. Ce projet est assez grand, ce qui signifie que je dois me habituer à la langue et moi-même obtenir une configuration optimale avant de commencer réellement pour éviter la surcharge et sans tracas inutiles.

Je suis à la recherche des sources qui expliquent les bases'D de la programmation fonctionnelle dans les grands projets. Malheureusement, la plupart des sources ne parlent que de Javascript de base destiné à des trucs simples dans un navigateur.

Deux liens utiles qui expliquent comment la création d'objet fonctionne en Javascript sont http://howtonode.org/object-graphs et http://howtonode.org/object-graphs-2 .

En fin de compte, il semble plus judicieux de créer un objet comme:

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

Maintenant, je suis à la recherche d'une référence linguistique complète Javascript. Jusqu'à présent, https://developer.mozilla.org/en/JavaScript/Reference semble être le plus complet.

Q1: est-ce la référence linguistique ECMAScript recommandée? Je demande surtout parce qu'il est sourcé par une entreprise qui travaille principalement dans l'industrie du navigateur, mais Javascript est pas seulement là pour les navigateurs -. Peut-être il y a des sources que je ne suis pas au courant de

En second lieu, je suis habitué à la création d'un nouveau fichier pour chaque classe que je crée où le nom du fichier représente le nom de la classe. Q2: Est-ce la pratique recommandée en Javascript (V8, Node.js) aussi? Comment peut-on « importer » cette classe?

« importation » me conduit à mon confusingness de « besoin » de Node.js. Je sais que ce n'est pas la même chose. Exiger des charges essentiellement un autre fichier qui a alors son propre espace de noms, ce qui signifie que c'est les variables sont hors de la portée du fichier qui est requireing ce fichier. Pour mes cours cependant, je veux avoir des méthodes qui sont disponibles à la classe qui est « l'importation » (citations que je ne suis pas sûr que ce soit même possible) cette classe. Par exemple:.

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

Pour autant que je sache, cette méthode doSomething () est disponible uniquement si elle a été définie comme:

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

Q3: Est-ce exact? Ça ne semble tout à fait anormal?

Q4: Y a-t-il des autres blogs ou des ressources qui sont utiles pour obtenir mon travail de configuration, comme howtonode.org

?

Enfin, Q5: Y at-il eu des efforts pour faire de tout cet héritage, la création d'objets, structure du projet, plus facile pour les espaces de noms, etc. grands projets? Toutes les bibliothèques ou quelque chose à cet effet?

Espérons que mes questions sont claires. Toute aide est appréciée. Merci.

Était-ce utile?

La solution

  

est-ce la référence linguistique ECMAScript recommandée?

Eh bien la référence de la langue officielle de ECMAScript est le ECMA-262 lui-même . Mais, malheureusement, ce qui est totalement illisible, même par les normes des documents de normes.

ECMA ne produisent pas de matières destinées à la fin des programmeurs et il n'y a pas un tutoriel considéré comme « meilleur ». Le lien MDC semble décent, au moins. (Tutoriels La plupart JavaScript sont absolument horrible et plein d'erreurs. Ce qui est en partie la faute de JavaScript pour avoir tant ... excentriques ... caractéristiques, mais quand même.)

  

En fin de compte, il semble plus judicieux de créer un objet comme:

Il n'y a malheureusement aucun moyen largement acceptée-'best » pour mettre en œuvre un système de classe / instance en JavaScript. Beaucoup de cadres ont leurs propres systèmes, ou vous pouvez brasser votre propre. Votre code exemple crée une nouvelle instance de chaque méthode pour chaque instance d'objet, que vous pourriez envisager suboptimale par rapport au prototypage natif de JS. (Normalement, cette approche est utilisée avec un var that= this la fermeture pour éviter les problèmes dans le code de rappel contraignant this.) Vous devez également faire preuve de prudence dans la façon dont vous créez et les sous-classes dans les constructeurs initialise.

Voir cette question pour une discussion sur approches de classe / instance dans JS.

  

Je suis habitué à la création d'un nouveau fichier pour chaque classe que je crée

Ouais, c'est une verrue Java vous ne devriez pas apporter à JS.

Gardez vos fichiers source en morceaux faciles à gérer des classes et des fonctions connexes. Parfois, ce sera une classe publique par fichier, le plus souvent il ne sera pas.

  

Comment peut-on "importer" cette classe?

JS lui-même n'a pas de fonctionnalité d'importation native. Dans les navigateurs vous le faire en insérant le code des balises <script> ou eval ing extraites par XMLHttpRequest, et doivent prendre soin de garder les variables séparées manuellement namespaces. Dans Node.js et d'autres endroits où vous travaillez avec CommonJS, vous utilisez des modules et require().

  

est-ce exact?

Oui.

  

ne pas sembler tout à fait anormal?

Je ne pense pas. Il est similaire à d'autres langages de script, où il s'avère très utile. Il est seulement vraiment Java qui vous oblige à conclure une unité de compilation dans une seule classe.

Autres conseils

Je suis venu avec ce qui suit après avoir lu un livre intitulé Pro Design Patterns Javascript. Cependant, on m'a dit que ce n'est pas bon de penser comme ça (privé, public, statique, etc.) en 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";
        }
    }
})();

Il serait instancié comme ceci:

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

Tous les commentaires? Dois-je lire un autre livre?

Si vous avez pas déjà, les vidéos de la caisse Douglas Crockford. Il a un tas de vidéos qui parlent des aspects prototypal de JavaScript.

Google pour 'Java Douglas Crockford langage de programmation vidéo'. Voici un lien vers la première partie de la série: http://video.yahoo.com/watch / 111593/1710507

Le defineClass NPM offre POO simple et puissant pour JavaScript avec le soutien des caractères (mixins) et imbriquée Des classes. Voici un exemple d'utilisation:

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);
  }
});

En savoir plus dans le readme: https://github.com/nodirt/defineClass

Installation:

$ npm install defineClass
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top