Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   почему пишу так? (https://javascript.ru/forum/offtopic/46926-pochemu-pishu-tak.html)

Дзен-трансгуманист 30.04.2014 11:43

kobezzza,
Ну в частности меня интересует окно браузера/воркер/нода
function foo ( func ) {
  ???
}

foo( function ( global, envType ) {
  // global -> global object
  // envType -> 'window' / 'worker' / 'node'
});

Как сделать это максимально корректно?

kobezzza 30.04.2014 11:57

Ну, обычно хватает:

(function (global) {
})(this);


В окне и потоке this - это будет ссылка на глобальный объект.

В окружении ноды this - это ссылка на exports, а доступ к глобальному объекту доступен через ссылку global, но при написании модулей как правило нужен именно exports.

В node-webkit насколько мне известно вcё также, как и в окне браузера.

Варианты для логического определения:
var isWorker = typeof window === 'undefined' && typeof importScripts !== 'undefined';
var isNode = typeof window === 'undefined' && typeof global !== 'undefined';


Это не 100% гарантия, ибо в той же ноде можно сделать:

global.window = {};


И всё сломается, но тот, кто так делает - сам виноват :)

Octane 30.04.2014 13:12

Цитата:

Сообщение от kobezzza
В node-webkit насколько мне известно вcё также, как и в окне браузера.

В node-webkit зависит от способа подключения скрипта: с помощью <script> или как модуль Nodejs

<script>
typeof require → "function"

typeof setImmediate → "undefined"

typeof global.setImmediate → "function"

typeof postMessage → "function"


Модуль
typeof require → "function"

typeof setImmediate → "function"

typeof global.setImmediate → "function"

typeof postMessage → "undefined"

Дзен-трансгуманист 30.04.2014 13:23

Цитата:

Сообщение от kobezzza
var isWorker = typeof window === 'undefined' && typeof importScripts !== 'undefined';
var isNode = typeof window === 'undefined' && typeof global !== 'undefined';

Ок, спасибо за вариант.
Насчет глобального объекта нашел такое
Function('return this')()
А потом подумал: как я сам до этого не допер? :)

Цитата:

Сообщение от kobezzza
тот, кто так делает - сам виноват

Ну, не каждый, кто так или иначе сталкивается с JS, обязательно профи. Например, фотошопщик вряд ли будет досконально учить язык, если ему нужно всего-то слои выровнять. :)

kobezzza 30.04.2014 13:41

Цитата:

Function('return this')()
хакерство это :)

monolithed 30.04.2014 17:25

Цитата:

Сообщение от kobezzza
хакерство это

В чем?

kobezzza 30.04.2014 17:40

Цитата:

Сообщение от monolithed (Сообщение 309926)
В чем?

Во всём:)

Maxmaxmaximus100 30.04.2014 18:09

проверка на существование

if(value == null){
  
}



нубы.......

А реверенс исключения не надо избегать тайпофом, это плохой стиль.


Часовой пояс GMT +3, время: 15:50.