||和javascript中的onmessage

时间:2013-09-10 10:56:56

标签: javascript appjs

我正在阅读一个开源项目,它有js file这样的

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

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

(nativeWindow || appjs )意味着它们都是对象?

这是否意味着为这两个函数调用了这个函数?

或者它正在合并这两个对象?

.onmessagealert()还是window这样的标准内容?标准的意思是,这个.onmessage函数幕后发生了什么,或者它就像简单的函数一样?

由于

5 个答案:

答案 0 :(得分:5)

如果nativeWindow的计算结果为false(例如,如果它未定义),那么appjs将作为源传入;否则nativeWindow作为源传入。然后将作为源中的任何对象的消息的属性设置为onmessage函数

答案 1 :(得分:2)

来自the MDN

  

expr1 ||表达式2

     

如果可以转换为true,则返回expr1;否则,返回   表达式2。因此,当与布尔值一起使用时,||如果有,则返回true   操作数是真的;如果两者都为假,则返回false。

在这种特定情况下,定义其值的第一个值将作为参数传递。

答案 2 :(得分:2)

.onmessagepipe函数中分配的内容。它只是source对象的普通属性。

javascript中的||&&会返回一个值。 这意味着; nativeWindow OR appjs作为表达式返回的值传入;返回最后一个计算表达式。如果nativeWindow是一个假的(null,undefined等)值,那么appjs就会被传入。如果nativeWindow是无用的(例如一个对象),它会被传入。只需要考虑this OR that。如果两个值都是假的,那么右侧的那个仍然会被传入。阅读更多关于||和&&在这里:http://www.grauw.nl/blog/entry/510

答案 3 :(得分:1)

||OR运算符。如果左手评估为真,那么它也会短路。因此,如果nativeWindow为false-ish,它所提供的功能是appjsnativeWindow的值。

同样更详细的是:

var pipe = function()...;
if(nativeWindow) {
    pipe = pipe(nativeWindow);
} else {
    pip = pipe(appjs);
}

答案 4 :(得分:1)

(nativeWindow || appjs, {}) = (source, listeners) 

它们是传递的参数

nativeWindow  || appjs 

表示如果 nativeWindow 未定义或者falsy取值 appjs

source.onmessage  

onmessage 是对象 source (作为nativeWindow || appjs传递)的属性,它在您的案例中保存一个函数