Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 30.04.2014, 11:43
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

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

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

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

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #12 (permalink)  
Старый 30.04.2014, 11:57
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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

(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 = {};


И всё сломается, но тот, кто так делает - сам виноват
__________________
kobezzza
code monkey
Ответить с цитированием
  #13 (permalink)  
Старый 30.04.2014, 13:12
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от 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"
Ответить с цитированием
  #14 (permalink)  
Старый 30.04.2014, 13:23
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Сообщение от kobezzza
var isWorker = typeof window === 'undefined' && typeof importScripts !== 'undefined';
var isNode = typeof window === 'undefined' && typeof global !== 'undefined';
Ок, спасибо за вариант.
Насчет глобального объекта нашел такое
Function('return this')()
А потом подумал: как я сам до этого не допер?

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

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #15 (permalink)  
Старый 30.04.2014, 13:41
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Function('return this')()
хакерство это
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 30.04.2014 в 13:44.
Ответить с цитированием
  #16 (permalink)  
Старый 30.04.2014, 17:25
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от kobezzza
хакерство это
В чем?
Ответить с цитированием
  #17 (permalink)  
Старый 30.04.2014, 17:40
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от monolithed Посмотреть сообщение
В чем?
Во всём
__________________
kobezzza
code monkey
Ответить с цитированием
  #18 (permalink)  
Старый 30.04.2014, 18:09
Аватар для Maxmaxmaximus100
Аспирант
Посмотреть профиль Найти все сообщения от Maxmaxmaximus100
 
Регистрация: 30.04.2014
Сообщений: 57

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

if(value == null){
  
}



нубы.......

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните, почему так происходит ak-o jQuery 12 12.07.2013 12:32
Извините что создаю еще одну тему, но мне нужна помощь и ваше мнение megaupload Оффтопик 11 27.05.2013 12:58
Посоветуйте новику, что я делаю не так danil-n2 Общие вопросы Javascript 5 26.04.2013 21:22
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Prototype. Одноблочное определение псевдокласса. Литеральная форма не робит. Почему? GuardCat Общие вопросы Javascript 6 03.10.2011 13:46