Frage

Ich habe beschlossen, mit Javascript zu gewöhnen, wie mein Server-seitig (ich verwende Node.js) Sprache für das Einrichten eines Webserver, Server deamons erstellen und vieles mehr. Dies ist ein ziemlich großes Projekt, das bedeutet, dass ich in die Sprache gewöhnen muß und mir ein optimales Setup bekommen, bevor sie tatsächlich beginnt Aufwand und unnötigen Ärger zu vermeiden.

Ich habe nach Quellen gesucht, das die Grundlagen der funktionalen Programmierung in großen Projekten erklären würde. Leider sprechen die meisten Quellen nur über grundlegende Javascript für einfache Tricks in einem Browser gemeint.

Zwei hilfreiche Links, die erklärt, wie die Objekterstellung Arbeiten in Javascript waren http://howtonode.org/object-graphs und http://howtonode.org/object-graphs-2 .

Am Ende scheint es am klügsten, ein Objekt wie zu erstellen:

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

Nun, ich bin auf der Suche für eine komplette Referenz Javascript Sprache. Bisher https://developer.mozilla.org/en/JavaScript/Reference scheint sein vollständigste.

Q1: das ist die Referenz ECMAScript Sprache empfohlen? Ich frage vor allem, weil es von einem Unternehmen bezogen ist, das meist ist im Browser Industrie, Javascript ist nicht nur dort für Browser -. Vielleicht gibt es Quellen, dass ich nichts von

Zweitens, ich verwende, um eine neue Datei für jede Klasse zum Erstellen ich schaffen, in dem der Dateiname den Namen der Klasse darstellt. Q2: Ist die empfohlene Praxis in Javascript (V8, Node.js) auch? Wie würde ein "Import" diese Klasse?

Dieses „Import“ führt mich zu meinem confusingness über Node.js des „erfordern“. Ich weiß, es ist nicht das gleiche. Erfordern im Grunde lädt eine andere Datei, die dann seine eigenen Namensraum hat, was bedeutet, dass es die Variablen aus dem Anwendungsbereich der Datei, die diese Datei ist requireing. aber für meine Klassen, mag ich Methoden, die auf die Klasse zur Verfügung stehen, die „Import“ (Zitate, wie ich bin nicht sicher, ob dies überhaupt möglich ist) diese Klasse. Zum Beispiel:.

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

Soweit ich weiß, die doSomething () Methode ist nur verfügbar, wenn es wie eingestellt wurde:

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

Q3: Ist das richtig? Nicht, dass ziemlich anormal scheinen?

Q4: Gibt es andere Blogs oder Ressourcen, die mein Setup hilfreich arbeiten in immer, wie howtonode.org

?

Schließlich Q5: hat es Bemühungen gegeben, in alle diese Erbschaft macht, Objekterstellung, Projektstruktur, Namespacing usw. einfacher für große Projekte? Jegliche Bibliotheken oder etwas zu diesem Zweck?

Hoffentlich sind meine Fragen klar. Jede Hilfe ist willkommen. Danke.

War es hilfreich?

Lösung

  

ist dies die empfohlene ECMAScript-Sprachreferenz?

Nun, die offizielle ECMAScript-Sprachreferenz ist die ECMA-262 selbst. Aber leider ist dies völlig unleserlich selbst nach den Maßstäben von Standarddokumenten.

ECMA erzeugen keine Materialien an End-Programmierer richtet und es ist niemand Tutorial als „beste“. Der MDC Link sieht in Ordnung, zumindest. (Die meisten JavaScript-Tutorials sind absolut schrecklich und voller Fehler. Welche zum Teil Fehler von JavaScript ist dafür, dass so viele ... schrullig ... verfügt, aber trotzdem.)

  

Am Ende scheint es am klügsten, ein Objekt wie zu erstellen:

Es ist leider keine weithin akzeptierte-'Best‘Art und Weise eine Klasse / Instanz-System in JavaScript zu implementieren. Viele Rahmenbedingungen haben ihre eigenen Systeme, oder Sie können Ihre eigenen brauen. Ihr Beispielcode erstellt eine neue Instanz der einzelnen Methoden für jede Objektinstanz, die Sie suboptimal im Vergleich zu JS nativen Prototyping betrachten könnten. (Normalerweise wird dieser Ansatz mit einem var that= this in der Schließung zu vermeiden this bindenden Probleme in Callback-Code verwendet.) Sie auch Übung Pflege benötigen würden, wie Sie Unterklassen erstellen und initialisieren sie in der Konstrukteurs.

finden Sie unter für eine Diskussion href="https://stackoverflow.com/questions/1595611/how-to-properly-create-a-custom-object-in-javascript"> auf Ansätze zur Klasse / Instanz in JS.

  

Ich bin es gewohnt, eine neue Datei für jede Klasse zum Erstellen ich erstellen

Ja, das ist eine Java-Warze Sie sollten nicht zu JS bringen.

Halten Sie Ihre Quelldateien in überschaubaren Einheiten von verwandten Klassen und Funktionen. Manchmal, dass eine öffentliche Klasse pro Datei sein, desto häufiger wird es nicht sein.

  

Wie würde ein "Import" diese Klasse?

JS selbst hat keine nativen Importfunktion. In Browsern haben Sie es <script> Tags oder eval ing Code geholt durch XMLHttpRequest durch Einfügen und haben Variablen in eigenen Namensraum zu halten manuell kümmern. In Node.js und anderen Orten, wo man mit Commonjs arbeiten, verwenden Sie Module und require().

  

Ist das richtig?

Ja.

  

nicht, dass scheint ziemlich anormal?

Das glaube ich nicht so. Es ist ähnlich wie andere Skriptsprachen, in denen es sehr nützlich erweist. Es ist nur wirklich Java dass zwingt Sie eine Übersetzungseinheit in einer einzigen Klasse einpacken.

Andere Tipps

kam ich mit dem folgenden, nachdem ein Buch zu lesen Pro Javascript Design Patterns genannt. Ich habe allerdings gesagt, dass es nicht gut ist wie diese (privat, öffentlich, statisch, etc.) zu denken, 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";
        }
    }
})();

Es wäre wie folgt instanziiert werden:

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

Fragen oder Anregungen? Soll ich lesen ein anderes Buch?

Das defineClass npm Paket bietet einfachen, aber leistungsfähigen OOP für JavaScript mit Unterstützung für Züge (Mixins) und verschachtelte Klassen. Hier ist ein Beispiel für die Verwendung:

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

Lesen Sie mehr in der Readme: https://github.com/nodirt/defineClass

Installation:

$ npm install defineClass
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top