0

必要に応じて追加および削除されるプロパティを含む大きな JavaScript オブジェクトがあります。これに似たもの:

var data = {

  data1: {
      subscribers : ["sub1", "sub2"]
  },

  data2: {
      subscribers : ["sub1", "sub2"]
  }

  //[0...*]

};

「data2」からのサブスクライバーが必要なので、data["data2"].subscribersこの情報にアクセスするために使用します。

しかし、私の質問は次のとおりです。

  • このようなプロパティにアクセスする JavaScript 内部の仕組み (ドット表記、プロパティ名を使用) は何ですか?
  • オブジェクトのサイズは、サブスクライバー配列が返される速度に影響しますか?

JavaScript がプロパティにアクセスする方法は、オブジェクトに対して for ループを使用していると思うので、サイズが返されるデータの受信速度に影響を与えると思います。

function getSubs(name) {
    for(var prop in data) {
        if(prop === name) {
            return data[prop].subscribers;
        }
    }
}
var subs = getSubs("data2");
4

3 に答える 3

6

いいえ、すべてのプロパティを繰り返し処理しても機能しませんが、基本的には、コンパイル前に頻繁に使用されるハッシュ テーブル パターンを使用し、コンパイル後にクラスを使用することによって機能します ( V8 については、こちらを参照してください)。

実際、これは JavaScript エンジンの内部動作の一部であり、仕様ではありません。知っておくべきことは次のとおりです。

はい、多くのプロパティを持つことは影響を与える可能性がありますが、あなたが思っているよりもはるかに軽い. ご心配なく。

于 2013-01-17T13:51:39.920 に答える
0

JavaScript オブジェクトは基本的にマップなので、内部的にハッシュ テーブルを使用することになると思います。

于 2013-01-17T13:57:21.150 に答える
-1

このようなプロパティにアクセスする JavaScript 内部の仕組み (ドット表記、プロパティ名を使用) は何ですか?

あなたの質問の前提はfalseです.JavaScriptには「内部動作」がありません!

JavaScript は言語であり、が起こるかを記述します。JavaScript には内部構造がないため、内部でどのように動作するかは記述されていません。

JavaScript のすべての実装には、独自のやり方があります。仕様で説明されているセマンティクス (つまりwhat ) を満たすため、心配する必要はありません。

このため、答えは次とおりです。

実行時にパフォーマンスの問題が発生し、使用するプロパティを減らすことで問題が解消されることが確実な場合にのみ、実装について考えたくなるかもしれません。しかし、それでも、問題がなくなったという知識だけで十分です。

于 2013-01-17T14:10:00.620 に答える