Pergunta

Eu decidi começar usado a utilização de Javascript como o meu server faces (eu estou usando Node.js o idioma para a instalação de um servidor web, criar server deamons e muito mais.Esse sim é um grande projeto, o que significa que eu tenho que me acostumar a linguagem e o pôr-me em uma configuração ideal antes de começar a evitar a sobrecarga e complicações desnecessárias.

Fui à procura de fontes que iria explicar os conceitos básicos de programação funcional em projetos grandes.Infelizmente, a maioria das fontes de falar apenas sobre Javascript básico, destinado simples truques em um navegador.

Dois links úteis que explicou como objeto a criação de obras em Javascript foram http://howtonode.org/object-graphs e http://howtonode.org/object-graphs-2.

No fim, parece que o mais sábio para criar um objeto, como:

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

Agora, eu estou olhando para uma completa linguagem Javascript referência.Até agora, https://developer.mozilla.org/en/JavaScript/Reference parece ser mais completo.

Q1:é este o recomendado linguagem ECMAScript de referência?O que eu estou pedindo principalmente porque é originado por uma empresa que está trabalhando no navegador da indústria, ainda que o Javascript não é apenas para os navegadores -- talvez haja fontes que eu desconheço.

Em segundo lugar, eu estou usado para criar um novo arquivo para cada classe de eu criar onde o file name representa o nome da classe.Q2:É esta prática recomendada em Javascript (V8, Node.js muito?Como seria uma "importar" essa classe?

Esta "importação" leva-me para o meu confusingness sobre Node.js's "exigir".Eu sei que não é o mesmo.Requer, basicamente, carrega o outro arquivo que, em seguida, tem o seu próprio espaço de nomes, o que significa que as variáveis estão fora do escopo do arquivo requireing este ficheiro.Para minhas aulas, no entanto, eu quero ter métodos que estão disponíveis para a classe que é a "importação" (aspas porque não tenho certeza se isso é mesmo possível) esta classe.Ex.:

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

Até onde eu sei, este doSomething() método só está disponível se foi definido como:

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

Q3:Isso é correto?Não que parecem bastante anormal?

Q4:Existem outros blogs ou recursos que são úteis na obtenção de meu programa de trabalho, como howtonode.org?

Finalmente, Q5:tem havido alguns esforços para fazer toda essa herança, a criação do objeto, projeto de estrutura, espaço de nomes etc.mais fácil para os grandes projetos?Qualquer biblioteca ou algo para esta finalidade?

Espero que minhas perguntas são claras.Qualquer ajuda é apreciada.Obrigado.

Foi útil?

Solução

é este o recomendado linguagem ECMAScript de referência?

Bem, o oficial de linguagem ECMAScript de referência é o ECMA-262 em si.Mas, infelizmente, isso é completamente ilegível, mesmo para os padrões de padrões de documentos.

ECMA não produzem quaisquer materiais que visam o fim-de programadores e não há um tutorial considerado "melhor".O MDC link parece decente, pelo menos.(A maioria dos tutoriais de JavaScript são absolutamente horrível e cheio de erros.O que é, em parte, o JavaScript culpa por ter tantos...peculiar...recursos, mas ainda assim.)

No fim, parece que o mais sábio para criar um objeto, como:

Infelizmente, não há amplamente aceite-o "melhor" maneira de implementar uma classe/instância do sistema em JavaScript.Um monte de quadros possuem seus próprios sistemas, ou você pode amadurecer o seu próprio.O exemplo de código cria uma nova instância de cada método para cada instância de objeto, que você pode considerar de qualidade inferior em comparação à JS nativo de prototipagem.(Normalmente, essa abordagem é usada com um var that= this no fechamento para evitar this-problemas de ligação no código de retorno de chamada.) Você também precisa ter cuidado em como você criar subclasses e inicializar-los em construtores.

Ver esta pergunta para uma discussão sobre as abordagens de classe/instância em JS.

Eu estou usado para criar um novo arquivo para cada classe de eu criar

Sim, isso é uma Java verruga você não deve trazer para JS.

Manter os arquivos de origem em pedaços gerenciáveis de classes relacionadas e funções.Às vezes, isso vai ser uma classe pública por arquivo, mais frequentemente do que não ser.

Como seria uma "importar" essa classe?

JS em si não tem nenhum nativo funcionalidade de importação.Em navegadores que você fazê-lo através da inserção de <script> tags ou evaling código obtidos pelo XMLHttpRequest, e tem que tomar cuidado de manter as variáveis em separado de espaços de nomes manualmente.No Node.js e outros lugares onde você está trabalhando com CommonJS, você pode usar módulos de e require().

Isso é correto?

Sim.

Não que parecem bastante anormal?

Eu não penso assim.É semelhante a outras linguagens de script, onde ele se mostra muito útil.Só é realmente Java que força você a embrulhar uma unidade de compilação em uma única classe.

Outras dicas

Eu vim com o seguinte após a leitura de um livro chamado Pro Javascript Padrões de Projeto.No entanto, eu tenho dito que não é bom para pensar como este (private, public, static, etc.) em 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";
        }
    }
})();

Seria instanciado como este:

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

Algum comentário?Eu deveria ler um outro livro?

Se você ainda não o fez, veja os vídeos por Douglas Crockford.Ele tem um monte de vídeos que falam sobre o protótipo aspectos de JavaScript.

O Google por 'Douglas Crockford Java Linguagem de Programação de áudio e Vídeo.Aqui está um link para a primeira parte da série: http://video.yahoo.com/watch/111593/1710507

O defineClass npm pacote fornece simples, mas poderosa OOP para JavaScript com suporte para traços (mixins) e classes aninhadas.Aqui está um exemplo 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);
  }
});

Leia mais no leia-me: https://github.com/nodirt/defineClass

Instalação:

$ npm install defineClass
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top