0

Google のブックマーク バブル ライブラリのコードを調べたところ、次のようなものに出会いました。

var google = google || {};
google.bookmarkbubble = google.bookmarkbubble || {};

彼らがここで何をしているのか、そしてなぜそれをしているのか誰か説明してもらえますか? JS はインタープリター言語なので、なぜ同じ google オブジェクトを google 変数に割り当てる必要があるのでしょうか? これが含まれているスクリプトは、ページが読み込まれるたびに 1 回しか実行されませんか?

4

3 に答える 3

2

名前空間のようなオブジェクトを設定しています。すでにgoogleオブジェクトまたはgoogle.bookmarkbubbleオブジェクトがある場合、彼らはそれを置き換えないようにしています。たとえば、別の Google ライブラリを追加したgoogle場合、次のようなオブジェクトが既に設定されている可能性があります。

{
    somelibrary: {
        ...
    }
}

したがって、彼らが持っていた場合:

var google = { bookmarkbubble: { ... } }

それは、 を参照するすべてのコードを破壊しますgoogle.somelibrary。同様に、それらがなく、まだ定義var google = google || {};していない場合は、エラーがスローされます。 googlegoogle.bookmarkbubble

つまり、このコードは、google.bookmarkbubble以前に定義されたgoogleまたはgoogle.bookmarkbubbleオブジェクトを上書きすることなく、オブジェクトが存在することを保証します。

于 2012-07-13T14:27:16.417 に答える
1

var google = google || {};の省略構文です

if (!google) {
  google = {};
}

googleこれにより、少なくとも空のハッシュであるため、2番目の割り当てが失敗しないことが保証されます。

于 2012-07-13T14:31:35.790 に答える
0

これは、1 つのライブラリに多数のファイルが含まれており、それらのファイルがユーザーによって含まれている場合と含まれていない場合によく行われます。最初のライブラリはgoogle空のオブジェクトに初期化され (何も評価されないため)、後続のライブラリはオブジェクトに既に追加されているプロパティを保持します。

于 2012-07-13T14:26:54.543 に答える