2013-09-10 6 views
1

Я читаю проект с открытым исходным кодом и имеет js file как этот|| и OnMessage в JavaScript

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

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

Что (nativeWindow || appjs) означает, где они оба являются объектами?

Означает ли это, что эта функция называется для них обоих?

Или это слияние обоих этих объектов?

И это .onmessage что-то стандартное, например alert() или window? Что я имею в виду по стандарту, так это что-то происходит за кулисами в этой функции .onmessage или это просто простая функция?

Благодаря

+2

Ответ: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Операторы/Logical_Operators –

+0

Это может быть легко для других, но для кого-то с фоном C++, который пытается понять файл javascript, это кажется запутанным. –

+0

Спасибо всем. вы можете посмотреть http://help.dottoro.com/ljjqtjsj.php и сообщить свои окончательные комментарии по этому вопросу. –

ответ

5

если NativeWindow имеет значение ЛОЖЬ (например, если это не определено), то appjs передается в качестве источника; иначе nativeWindow передается как источник.Свойство OnMessage из какой бы объект ispassed в качестве источника затем устанавливают на функцию OnMessage

+0

поэтому onmessage - простая функция, ничего похожего на какую-то стандартную функцию, которая будет вызвана, если что-то произойдет на dom? –

+0

Нет, это не простая функция, пожалуйста, прочитайте о [Почтовые сообщения] (https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage) – Teemu

+0

, так что это должно быть фреймворк, а не любая стандартная версия браузеров. вы можете посмотреть http://help.dottoro.com/ljjqtjsj.php и сообщить свои окончательные комментарии по этому вопросу. –

1

|| является OR оператором. Он также замыкается, если левая оценка истинна. Так что это означает, что функция имеет либо значение nativeWindow ИЛИ appjs, если nativeWindow является ложным.

Более многословным того же будет:

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

От the MDN:

выражение1 || expr2

Возвращает expr1, если он может быть преобразован в true; в противном случае возвращается expr2. Таким образом, при использовании с булевыми значениями || возвращает true, если либо операнд равен true; если оба они ложны, возвращает false.

В этом конкретном случае в качестве аргумента передается первое значение, значение которого определено.

+0

Вы тоже можете прокомментировать статью onmessage? –

+2

* В этом конкретном случае первое значение, значение которого определено, передается как аргумент. * Не является строго истинным. Это первое значение, которое является правдивым, или последнее значение, если все значения ложны. –

+0

@PaulGrime «В этом конкретном случае»: я прокомментировал этот вариант использования, а не общую работу ||. –

2

.onmessage - это то, что назначено в функции pipe. Это обычный объект на объекте source.

|| и && в javascript возвращает значение. Это означает; nativeWindow ИЛИ appjs передается в качестве возвращаемого значения из выражения; последнее полученное выражение возвращается. Если nativeWindow является фальшивым (нулевым, неопределенным и т. Д.) Значением, передается appjs. Если nativeWindow является thruthy (например, объектом), он передается. Просто подумайте this OR that. Если оба значения ложны, то с правой стороны все равно будет передано. Читать дальше на || и & & здесь: http://www.grauw.nl/blog/entry/510

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

Они являются параметры, передаваемые

nativeWindow || appjs 

означает, что если NativeWindow не определен или falsy принимать значение appjs

source.onmessage 

OnMessage это свойство источника объекта (передается как nativeWindow || appjs), который имеет функцию в случае

+0

Отличный ответ! кратким и полным. – UpTheCreek

+0

@UpTheCreek Спасибо :) – rps

Смежные вопросы