1

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

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

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

是什么(nativeWindow || appjs )意思他们都是对象?

这是否意味着他们两个都调用了这个函数?

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

.onmessage是标准的东西吗alert()window我所说的标准是在这个.onmessage函数的幕后发生了什么,还是就像简单的函数一样?

谢谢

4

5 回答 5

5

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

于 2013-09-10T11:00:54.763 回答
2

来自MDN

expr1 || expr2

如果可以转换为 true,则返回 expr1;否则,返回 expr2。因此,当与布尔值一起使用时,|| 如果任一操作数为真,则返回真;如果两者都为假,则返回假。

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

于 2013-09-10T10:59:47.220 回答
2

.onmessage是在pipe函数中分配的任何内容。它只是source对象的普通属性。

javascript 中的||and返回一个值。&&这表示; nativeWindowORappjs被传入,作为表达式的返回值;最后评估的表达式被返回。如果nativeWindow是一个虚假的(null、未定义等)值,appjs 会被传入。如果nativeWindow是 thruthy(例如对象),它会被传入。想想吧this OR that。如果两个值都是假的,则仍然会传入右侧的值。阅读更多关于 || 和&&在这里:http ://www.grauw.nl/blog/entry/510

于 2013-09-10T11:00:47.787 回答
1
(nativeWindow || appjs, {}) = (source, listeners) 

它们是传递的参数

nativeWindow  || appjs 

表示如果nativeWindow未定义或为假,则取 appjs 的

source.onmessage  

onmessage是对象的属性(传递为nativeWindow || appjs),它在您的情况下包含一个函数

于 2013-09-10T11:08:41.370 回答
1

||OR运算符。如果左手评估为真,它也会短路。所以它所做的是为函数提供nativeWindowOR appjsif的值nativeWindow是假的。

更详细的相同内容是:

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