Определение независимой от реализации версии глобального объекта в JavaScript
Я пытаюсь определить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);