Я пытаюсь определить объект global
в JavaScript в одной строке следующим образом:
var global = this.global || this;
Приведенное выше утверждение находится в глобальной области видимости. Следовательно, в браузерах указатель this
является псевдонимом для объекта window
. Если предположить, что это первая строка JavaScript, выполняемая в контексте текущей веб-страницы, то значение global
всегда будет таким же, как у указателя this
или объекта window
.
В реализациях CommonJS, таких как RingoJS и node.js указатель this
указывает на текущий ModuleScope
. Однако мы можем получить доступ к объекту global
через свойство global
, определенное на ModuleScope
. Следовательно, мы можем получить к нему доступ через свойство this.global
.
Таким образом, этот фрагмент кода работает во всех браузерах и по крайней мере в RingoJS и node.js, но я не тестировал другие реализации CommomJS. Поэтому я хотел бы знать, не даст ли этот код правильных результатов при запуске на любой другой реализации CommonJS, и если да, то как я могу это исправить.
В конечном итоге я собираюсь использовать его в лямбда-выражении для моего независимого от реализации JavaScript фреймворка следующим образом (идея взята из jQuery):
(function (global) {
// javascript framework
})(this.global || this);