Domanda

Ho deciso di abituarsi ad usare Javascript come il mio lato server (sto usando Node.js) linguaggio per configurare un server web, creare demoni server e molto di più. Si tratta di una piuttosto grande progetto, il che significa che devo abituarmi al linguaggio e farmi una messa a punto ottimale prima di iniziare effettivamente per evitare spese generali e problemi non necessari.

Sono stato alla ricerca di fonti che avrebbe spiegato le basi della programmazione funzionale in grandi progetti. Purtroppo, la maggior parte delle fonti parlano solo di base Javascript significato per semplici trucchi in un browser.

Due link utili che spiegano come funziona la creazione di oggetti in Javascript erano http://howtonode.org/object-graphs e http://howtonode.org/object-graphs-2 .

Alla fine, sembra più saggio per creare un oggetto come:

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

Ora, sto cercando un riferimento completo il linguaggio Javascript. Finora, https://developer.mozilla.org/en/JavaScript/Reference sembra per essere più completo.

Q1: è questo il riferimento del linguaggio ECMAScript raccomandato? Mi chiedo soprattutto perché è di provenienza da una società che è in gran parte lavorano nel settore del browser, ma Javascript non è solo lì per i browser -. Forse ci sono fonti che io sono a conoscenza di

In secondo luogo, io sono abituato a creare un nuovo file per ogni classe che creo, dove il nome di file rappresenta il nome della classe. Q2: È questa prassi raccomandata in Javascript (V8, Node.js) troppo? Come direbbe un "import" questa classe?

Questa "importatori" mi porta a mio confusingness su Node.js di "richiedono". Io so che non è la stessa cosa. Richiede fondamentalmente carica un altro file che poi ha il proprio spazio dei nomi, il che significa che di variabili sono fuori del campo di applicazione del file che è questo file richiede l. Per le mie lezioni però, voglio avere metodi che sono disponibili per la classe che è "l'importazione" (virgolette come io non sono sicuro se questo è ancora possibile) questa classe. Ad esempio:.

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

Per quanto ne so, questo metodo doSomething () è disponibile solo se è stato impostato come:

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

Q3: E 'corretto? Non le sembra abbastanza anomalo?

Q4: Ci sono altri blog o le risorse che sono utili per ottenere il mio lavoro di installazione, come howtonode.org

?

Infine, Q5: vi sono stati sforzi nel rendere tutta questa eredità, la creazione di oggetti, struttura del progetto, ecc namespacing più facile per i grandi progetti? Le librerie o qualcosa del genere per questo scopo?

Speriamo che le mie domande sono chiare. Ogni aiuto è apprezzato. Grazie.

È stato utile?

Soluzione

  

È questo il riferimento del linguaggio ECMAScript consigliate?

Bene il riferimento ufficiale del linguaggio ECMAScript è il ECMA-262 stesso. Ma purtroppo questo è completamente illeggibile anche per gli standard di documenti standard.

ECMA non producono alcun materiale volti a finali programmatori e non c'è nessuno esercitazione considerato “migliore”. Il collegamento MDC sembra decente, almeno. (Tutorial La maggior parte JavaScript sono assolutamente orribile e pieno di errori. Il che è in parte colpa di JavaScript per avere così tanti ... eccentrico ... dispone, ma ancora).

  

Alla fine, sembra più saggio per creare un oggetto come:

Non è, purtroppo, non ampiamente accettata-'best’modo per implementare un sistema di classe / istanza in JavaScript. Un sacco di quadri hanno i propri sistemi, oppure si può preparare il proprio. Il codice di esempio crea una nuova istanza di ciascun metodo per ogni istanza di oggetto, che si potrebbe considerare non ottimale rispetto alla prototipazione nativo di JS. (Normalmente questo approccio viene utilizzato con un var that= this nella chiusura per evitare problemi this vincolante nel codice di callback.) Si sarebbe anche bisogno di cure esercizio nel modo in cui si creano sottoclassi e l'inizializzazione loro nei costruttori.

questa domanda per una discussione su approcci alla classe / istanza in JS.

  

Sono abituato a creare un nuovo file per ogni classe che creo

Sì, questo è un Java verruca non si dovrebbe portare a JS.

Tieni i tuoi file sorgente in blocchi gestibili di classi e funzioni correlate. A volte che sarà una classe pubblica per file, il più delle volte non sarà.

  

Come sarebbe una "importazione" questa classe?

JS per sé non ha alcuna funzionalità native di importazione. Nei browser si farlo con l'inserimento di tag <script> o codice eval ing recuperati da XMLHttpRequest, e devono prendersi cura di mantenere manualmente le variabili in spazi dei nomi separati. In Node.js e in altri luoghi in cui si sta lavorando con CommonJS, si utilizzano moduli e require().

  

E 'corretto?

Sì.

  

Non che sembra del tutto anomalo?

Non penso così. E 'simile ad altri linguaggi di scripting, in cui si rivela molto utile. E 'davvero solo Java che ti costringe a concludere un'unità di compilazione in una singola classe.

Altri suggerimenti

mi si avvicinò con il seguente testo dopo la lettura di un libro intitolato Pro Patterns Javascript design. Tuttavia, mi è stato detto che non è bene pensare come questo (privato, pubblico, statica, ecc) in 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";
        }
    }
})();

sarebbe un'istanza in questo modo:

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

Qualche commento? Dovrei leggere un altro libro?

Se non l'hai già, checkout i video di Douglas Crockford. Ha un sacco di video che parlare sugli aspetti prototipali di JavaScript.

Google per 'Douglas Crockford programmazione Java Video Lingua'. Questo è il link alla prima parte della serie: http://video.yahoo.com/watch / 111593/1710507

Il pacchetto defineClass npm fornisce OOP semplice ma potente per JavaScript con il supporto per i caratteri (mixins) e nidificato classi. Ecco un esempio di utilizzo:

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

Per saperne di più nel readme: https://github.com/nodirt/defineClass

Installazione:

$ npm install defineClass
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top