Pregunta

he decidido a acostumbrarse a usar Javascript que mi servidor del lado (estoy usando Node.js) lenguaje para configurar un servidor web, crear deamons servidor y mucho más. Este es un gran proyecto en lugar, lo que significa que tengo que acostumbrarse a la lengua y hacerme con una configuración óptima antes de iniciar realmente para evitar la sobrecarga y la molestia innecesaria.

He estado buscando fuentes que lo explicaría los fundamentos de la programación funcional en grandes proyectos. Por desgracia, la mayoría de las fuentes de hablar sólo de Javascript básica destinada a trucos simples en un navegador.

Dos enlaces útiles que explican cómo funciona la creación de objetos en Javascript fueron http://howtonode.org/object-graphs y http://howtonode.org/object-graphs-2 .

Al final, parece que lo más aconsejable para crear un objeto como:

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

Ahora, yo estoy buscando una completa referencia del lenguaje Javascript. Hasta el momento, https://developer.mozilla.org/en/JavaScript/Reference parece para ser más completa.

P1: es esta la referencia del lenguaje ECMAScript recomendada? Estoy preguntando sobre todo porque es de origen por una empresa que está trabajando sobre todo en la industria del navegador, sin embargo, JavaScript no está ahí sólo para los navegadores -. Tal vez hay fuentes que estoy al tanto de

En segundo lugar, estoy acostumbrado a crear un nuevo archivo para cada clase creo que el nombre de archivo representa el nombre de la clase. P2: ¿Es esta práctica recomendada en Javascript (V8, Node.js) también? ¿Cómo sería una "importación" de esta clase?

Esta "importadores" me lleva a mi confusingness sobre Node.js de "requieren". Yo sé que no es lo mismo. Requerir básicamente carga otro archivo que a su vez tiene su propio espacio de nombres, lo que significa que de las variables están fuera del alcance del archivo que se requireing este archivo. Para mis clases, sin embargo, yo quiero tener métodos que están disponibles para la clase que se "importan" (citas como no estoy seguro de si esto es posible) esta clase. Por ejemplo:.

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

Por lo que yo sé, este método doSomething () sólo está disponible si se ha establecido como:

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

P3: ¿Eso es correcto? ¿No le parece bastante anormal?

P4: ¿Hay otros blogs o recursos que son útiles para conseguir mi trabajo de instalación, como howtonode.org

?

Por último, P5: ¿ha habido esfuerzos en hacer todo esto la herencia, la creación de objetos, la estructura del proyecto, etc. namespacing más fácil para grandes proyectos? Cualquier biblioteca o algo para este fin?

Espero que mis preguntas son claras. Cualquier ayuda es apreciada. Gracias.

¿Fue útil?

Solución

  

Es esta la referencia del lenguaje ECMAScript recomendada?

Bueno, la referencia oficial del lenguaje ECMAScript es la ECMA-262 sí. Pero por desgracia esto es totalmente ilegible, incluso para los estándares de documentos de normas.

ECMA no producen ningún material destinadas a finales de los programadores y no hay nadie tutorial considerado “mejor”. El enlace MDC se ve decente, al menos. (Tutoriales mayoría de JavaScript son absolutamente horrible y lleno de errores. Lo cual es en parte culpa de JavaScript por tener tantos ... ... características peculiares, pero aún así.)

  

Al final, parece que lo más aconsejable para crear un objeto como:

Desafortunadamente no existe ampliamente aceptada-'best’manera de implementar un sistema de clases / instancia en JavaScript. Una gran cantidad de marcos tienen sus propios sistemas, o se puede preparar el suyo propio. El código de ejemplo se crea una nueva instancia de cada método para cada instancia de objeto, lo que se podría considerar subóptima en comparación con prototipos nativa de JS. (Normalmente este enfoque se utiliza con un var that= this en el cierre de los problemas de la unión this-Debe evitarse en código de devolución de llamada.) También se necesita para el cuidado ejercicio de cómo crear subclases y se inician en los constructores.

esta pregunta para una discusión sobre se acerca a la clase / instancia en JS.

  

Estoy acostumbrado a crear un nuevo archivo para cada clase se crea

Sí, eso es una verruga de Java no se debe llevar a JS.

Mantener los archivos de origen en trozos manejables de clases y funciones relacionadas. A veces que habrá una clase pública por archivo, más a menudo que no será.

  

¿Cómo sería una "importación" de esta clase?

JS sí no tiene funcionalidad de importación nativa. En los navegadores que hacerlo mediante la inserción de etiquetas de código de <script> o ING eval exagerado por XMLHttpRequest, y hay que tener cuidado de mantener las variables en los espacios de nombres separados manualmente. En Node.js y otros lugares en los que está trabajando CommonJS, utiliza módulos y require().

  

Es correcto?

Sí.

  

¿No le parece bastante anormal?

Yo no lo creo. Es similar a otros lenguajes de scripting, donde resulta muy útil. Es realmente sólo Java que le obliga para envolver una unidad de compilación en una sola clase.

Otros consejos

Se me ocurrió lo siguiente después de leer un libro que se llama Pro Javascript patrones de diseño. Sin embargo, me han dicho que no es bueno pensar así (privado, público, estática, 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";
        }
    }
})();

Sería una instancia como esta:

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

Cualquier comentario? Debo leer otro libro?

Si no lo ha hecho, la comprobación de los vídeos de Douglas Crockford. Él tiene un montón de vídeos que hablan de los aspectos prototípicos de JavaScript.

Google para 'Douglas Crockford lenguaje de programación Java Video'. Aquí hay un enlace a la primera parte de la serie: http://video.yahoo.com/watch / 111593/1710507

El paquete defineClass NPM ofrece programación orientada a objetos simple pero potente para JavaScript con soporte para características (mixins) y anidada clases. Aquí está un ejemplo de uso:

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

Más en el readme: https://github.com/nodirt/defineClass

Instalación:

$ npm install defineClass
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top