2017-01-01 6 views
0

特定のオブジェクトを扱う一連のJavaScript関数があります。すべてのこれらのオブジェクトは、次の柔軟性を有する:data[prop][sub-prop][etc.]、ORこのよう 条件付きデータ構造(オブジェクト)へのアクセス

  • タイプサブ構造を有する):data[TYPE][prop][sub-prop][etc.]

    • のフィールドは次のようにアクセスすることができます。

    オブジェクトは多くの場所でアクセスされ、条件(「is_mixed」と呼ぶ)はすべての場所で関連性があります。

    私は、次の選択肢を考えた:

    1. は、常にこのようdataにアクセス:(is_mixed ? data[TYPE] : data)[prop][sub-prop][etc.]
    2. はのgetDataと呼ばれる機能を持っており、常にこのようなdataアクセス:getData()[prop][sub-prop][etc.]を。 機能コードは次のようになります。

      function getData() { return is_mixed ? data[TYPE] : data; }

    3. 実行して、すべての新しい入力に以下:if (is_mixed) { data = data[TYPE]; }

    (オプション2と3は、オブジェクトデータをコピーするかもしれないと私には思われます)、パフォーマンスはここで重要です(この推測をサポートする文献は見つかりませんでした)が、オプション1はコードを大きくて醜いものにします。

    もっと良い選択肢はありますか?パフォーマンス、コード品質、基本的にベストプラクティスという点でこれを達成する最良の方法は何ですか?

  • +0

    JavaScriptオブジェクトは次のように操作されます。 *参照*。関数にオブジェクトを渡しても、オブジェクトコピーが構築されるわけではありません。 – Pointy

    +0

    あなたはそれが正しいです(解析されたJSON)。すべてのアクセスが参照であればそれは素晴らしいです、私はオプション2または3を使用することができます。Thnx。 –

    答えて

    2

    オプション2と3はありません、彼らはしませんJSONコンテンツ

    をコピーするかもしれないと私には思えます。それらは両方とも、(ブール値をコピーするのと同様に)素早く安価なオブジェクト参照をコピーするだけです。 #2はもちろん少しですが、それは関数呼び出しなのでlotと使用されていれば、どんなに良いJavaScriptエンジンでも関数がインライン展開されるため、ソースレベルでのモジュール性の利点が得られます。 (しかし、現代のエンジンは、問題が起こる可能性が高いときには、最適化に煩わされるだけです。)

    関連する問題