我正在阅读一个开源项目,它有js file这样的
var pipe = function(source, listeners){
source.onmessage = function onmessage(msg){
//.. do something ..
};
return {
//.. something ...
};
}(nativeWindow || appjs, {});
(nativeWindow || appjs )
意味着它们都是对象?
这是否意味着为这两个函数调用了这个函数?
或者它正在合并这两个对象?
此.onmessage
是alert()
还是window
这样的标准内容?标准的意思是,这个.onmessage
函数幕后发生了什么,或者它就像简单的函数一样?
由于
答案 0 :(得分:5)
如果nativeWindow的计算结果为false(例如,如果它未定义),那么appjs将作为源传入;否则nativeWindow作为源传入。然后将作为源中的任何对象的消息的属性设置为onmessage函数
答案 1 :(得分:2)
来自the MDN:
expr1 ||表达式2
如果可以转换为true,则返回expr1;否则,返回 表达式2。因此,当与布尔值一起使用时,||如果有,则返回true 操作数是真的;如果两者都为假,则返回false。
在这种特定情况下,定义其值的第一个值将作为参数传递。
答案 2 :(得分:2)
.onmessage
是pipe
函数中分配的内容。它只是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,它所提供的功能是appjs
或nativeWindow
的值。
同样更详细的是:
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
传递)的属性,它在您的案例中保存一个函数