あなたがコードを書いている:
第二に、あなたが名前空間を完全に制御を持っている場合も私はいくつかのカプセル化のために行くだろう、どこにでも実装プロトタイプ「パターン」を持っていません大規模な環境では、多くの問題が発生する可能性があります。したがって、クラス定義とそのクラスの使い方を区別することが重要です。これはまた、あなたが言うことを証明するために単体テストできるクラスを作る必要があることを意味します。 Javascriptは真のオブジェクト指向言語ではなく、それを「偽造」するいくつかの方法があります。しかし、言語には柔軟性があるため、いくつかのアプローチを複製することができます。
3つまたは4人の他のプログラマが、コードが何をしているのかを前提にして、意図しない "機能"を後で引き起こす可能性があるからです。グローバル変数が1つまたは2つの関数クロージャを上書きしたことがわからない場合は、その問題がより困難になることがわかります。だから私はJohn Resigで作成された小さなクラスを使用することをお勧めします。これは非常に簡単なアプローチであり、必要な機能をたくさん提供します。
コードを書きましょう。
[OK]をここではたくさんのものがあります。主要な部分は、これがクラスのすべての定義であるということです。私は実際には何も使用していません。プログラムは@staticで宣言されているLogEntry.PAGE_LOAD_STARTに現在の時刻のみを格納するので、動作は期待されます。私はここにたくさんのjsDocsを使用して、意図が何であるかをすべて明確にしました。 intelliJのようなプログラムは、あなたがそれらを文書化した方法でクラスを使用していない場合、コードフィードバックを与えるためにそれらを使用することができます。
このプログラムでは、ログデータを作成し、ログデータを保存することができます。これを行うための他の多くの方法があります。私はコンストラクタの中ではなく、コンストラクタの前にすべてを宣言して、型とそれらがプライベートであるかどうかを文書化することができます。
ログを使用しなければならないプログラマは、その使用方法を正確に知っていて、これらのクラスを作成または拡張したい場合は、関数クロージャによる意図しない影響を与えることなく行うことができます。
は、ここでそれを使用する方法は次のとおりです。もちろん
var anotherNamespace = anotherNamespace || {};
var anotherNamespace = new myNamespace.Log();
...
anotherNamespace.log.msg("This is a test");
...
anotherNamespace.log.data("Test msg with data", data);
ここに欠けている明白なことは、すべてのデータを表示する方法です。しかし、それはLog.log配列を繰り返し処理し、toString()をWebページまたはファイルに吐き出す別のクラスにある可能性があります。ここでのポイントは、クラスとその関数がシンプルで、単体テスト可能であり、定義のみであることです。
これは実際にはコードレビューサイトにあるはずですが、代替サイトリストには記載されていません。 – Alnitak
javascriptパターンの良い出典はこちらhttp://addyosmani.com/resources/essentialjsdesignpatterns/book/ –
要求事項?インタビュアーの実際の要件がなければ、コードを判断することは非常に難しいです。私は彼があなたにオブジェクトリテラルの束を書くように依頼したのか疑問に思う。 – Esailija