1

私はオープンソースプロジェクトを読んでおり、このようなjsファイルがあります

var pipe = function(source, listeners){
    source.onmessage = function onmessage(msg){
           //.. do something ..
    };

    return {
      //.. something ...
    };
  }(nativeWindow || appjs, {});

(nativeWindow || appjs )where they both are objectsとはどういう意味ですか?

この関数は両方に対して呼び出されるということですか?

それとも、これらのオブジェクトの両方をマージしていますか?

そして、これ.onmessageはまたはのような標準的なものですalert()window?私が標準で意味することは、この関数の舞台裏で何かが起こっているということ.onmessageですか、それとも単純な関数のようなものですか?

ありがとう

4

5 に答える 5

5

nativeWindow が false と評価された場合 (未定義の場合など)、appjs がソースとして渡されます。それ以外の場合は、nativeWindow がソースとして渡されます。次に、ソースとして渡されたオブジェクトのプロパティ onmessage が onmessage 関数に設定されます。

于 2013-09-10T11:00:54.763 に答える
2

.onmessage関数で割り当てられているものは何でもpipeです。sourceこれは、オブジェクトの通常のプロパティです。

JavaScriptの||and&&は値を返します。これの意味は; nativeWindowORappjsは、式からの戻り値として渡されます。最後に評価された式が返されます。が偽の (null、未定義な​​どの) 値である場合nativeWindow、appjs が渡されnativeWindowますthis OR that。両方の値が偽の場合でも、右側の値が渡されます。詳細については || を参照してください。&& ここ: http://www.grauw.nl/blog/entry/510

于 2013-09-10T11:00:47.787 に答える
2

MDNから:

式1 || expr2

true に変換できる場合は expr1 を返します。それ以外の場合は expr2 を返します。したがって、ブール値で使用すると、|| いずれかのオペランドが true の場合は true を返します。両方が false の場合、false を返します。

この特定のケースでは、値が定義されている最初の値が引数として渡されます。

于 2013-09-10T10:59:47.220 に答える
1

||ORオペレーターです。左辺の評価が true っぽい場合もショートします。nativeWindowしたがって、それが行うことは、関数にORの値のいずれかを提供することですappjsif nativeWindowis false-ish.

同じことをより詳細に説明すると、次のようになります。

var pipe = function()...;
if(nativeWindow) {
    pipe = pipe(nativeWindow);
} else {
    pip = pipe(appjs);
}
于 2013-09-10T10:59:23.683 に答える