どのように大規模なプロジェクトのためのサーバ側のNode.js JavaScriptにオブジェクトベースの言語から移動するには?

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

質問

私は私のサーバーは、(私はNode.jsのを使用しています)味方としてJavascriptを使用してに慣れることにしましたセットアップに言語ウェブサーバ、サーバのデーモンを作成し、より多くの。これは私が言語に慣れなければならないし、実際にオーバーヘッドや不要な手間を避けるために開始する前に自分自身に最適なセットアップを得ることではなく大きなプロジェクト、手段である。

私は大きなプロジェクトで関数型プログラミングの基本を説明したい情報源を探しています。残念ながら、ほとんどのソースは、基本的なJavascriptがブラウザで簡単なトリックのためのものだけについて話します。

オブジェクトの作成はJavascriptでどのように機能するかを説明し、

二つの役に立つリンクは http://howtonode.org/object-graphs <でした/>と http://howtonode.org/object-graphs-2するます。

は最後に、のようなオブジェクトを作成するために最も賢明なようです

function MyObject(constructorMemberOne, constructorMemberTwo) {
   this.constructorMemberOne = constructorMemberOne;
   this.constructorMemberTwo = constructorMembertwo;
   this.doSomething = function doSomething() {
       //
   }
}
今、私は完全なJavaScript言語のリファレンスを探しています。これまでのところ、 https://developer.mozilla.org/en/JavaScript/Reference のようです最も完全なものにする。

Q1:これは推奨のECMAScript言語リファレンスのですか?多分私は気づいていないのだというソースがある

- それは、ほとんどのブラウザ業界で働いている会社によって供給、まだJavascriptがブラウザのためだけに存在していないですので、私はほとんど聞いていますのよ。 第二に、私は、ファイル名はクラスの名前を表し、私が作成するすべてのクラスのための新しいファイルを作成するために使用しています。 Q2:あまりにJavascriptを(V8、Node.jsの)で、このお勧めしていますか?どのように1は、「インポート」は、このクラスのでしょうか?

Node.jsの者についての私のconfusingnessに

この「インポート」のリード私は「必要」。私はそれは同じではないことを知っています。基本的にロードし、それの変数は、このファイルをrequireingのファイルの範囲外であることを意味し、それ自身の名前空間を持つ別のファイルが必要です。私のクラスのためにしかし、私はこのクラス(私がいないことを確認これはさえ可能であるかどうかだと引用符)、「輸入」されたクラスに使用できるメソッドを持っていると思います。例:ます。

var utils = require("utils/MainUtils.js");
utils.doSomething();
それはのように設定した場合は、私の知る限りでは、このdoSomethingの()メソッドにのみ使用可能です。

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

Q3:それは正しいですか?かなり異常なようでいないこと?

Q4:?howtonode.org

のように、私のセットアップ作業を得るのに役立つ他のブログやリソースがあります

最後に、Q5は:すべての努力は、大規模なプロジェクトのために、このすべての継承、オブジェクトの作成、プロジェクト構造、名前空間などを簡単に行うことにありましたか?この目的のために、任意のライブラリか何か?

うまくいけば、私の質問は明確です。すべてのヘルプは大歓迎です。おかげます。

役に立ちましたか?

解決

  

これはお勧めのECMAScript言語リファレンスのですか?

まあ公式のECMAScript言語リファレンスは ECMA-262です自分自身をを。しかし残念ながら、これは規格文書の基準でさえ完全に読めないです。

ECMAは、エンド・プログラマを目指した任意の材料を生成していないと、「最良」とみなさ誰チュートリアルではありません。 MDCリンクは、少なくとも、まともに見えます。 (ほとんどのJavaScriptのチュートリアルは、まだ一部は非常に多くの...風変わりな...特徴を有するためのJavaScriptのせいでどの。絶対に恐ろしいとエラーに満ちている、しかし。)

  

は最後に、のようなオブジェクトを作成するために最も賢明なようです

JavaScriptでクラス/インスタンスのシステムを実装するために、残念ながらノー広く受け入れられている-'best」方法があります。フレームワークの多くは、独自のシステムを持っている、またはあなた自身を醸造することができます。あなたのコード例では、JSのネイティブプロトタイピングに比べ、次善を検討するかもしれない各オブジェクトインスタンスのための各メソッドの新しいインスタンスを作成します。 (通常、このアプローチは、コールバックコードで回避のvar that= this結合問題の閉鎖でthisで使用されます。)また、あなたはサブクラスを作成し、コンストラクタでそれらを初期化する方法の練習のケアに必要になります。

を参照してくださいには、上の議論のためにこの質問をhref="https://stackoverflow.com/questions/1595611/how-to-properly-create-a-custom-object-in-javascript">

  私は、私が作成するすべてのクラスのための新しいファイルを作成するために使用しています。

Javaの

うん、あなたはJSにもたらすべきではありませんいぼます。

関連するクラスや関数の扱いチャンクでソースファイルを保管してください。時には、それはより頻繁に、それはできません、ファイルごとに1つのパブリッククラスになります。

  

どのようにこのクラス1は、 "輸入" のでしょうか?

JS自体はネイティブのインポート機能を持っていません。ブラウザでは、<script>タグやevalのINGコードを挿入することによって、それを行うXMLHttpRequestによってフェッチされ、手動で別の名前空間内の変数を維持するの世話をする必要があります。 Node.jsのあなたはCommonJSで作業している他の場所では、モジュールとrequire()を使用します。

  

は正しいですか?

ということです

はいます。

  んが、かなり異常なようでないこと?

私はそうは思いません。それは非常に有用であることがわかっている他のスクリプト言語に似ています。それは軍あなたは、単一のクラスにコンパイルユニットをラップすることだけは本当にJavaの。

他のヒント

私はプロのJavascriptデザインパターンという本を読んだ後、次のを思い付きました。しかし、私はそれが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";
        }
    }
})();

これは、次のようにインスタンス化されると思います:

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

すべてのコメント?万一私は他の本を読んで?

defineClass のNPMパッケージが特徴(ミックスイン)をサポートするJavaScriptのためのシンプルで強力なOOPを提供し、ネストされましたクラス。ここでの使用例は、次のとおりです。

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

もっと読むreadmeの: https://github.com/nodirt/defineClassする

インストールます:

$ npm install defineClass
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top