Определение независимой от реализации версии объекта global в 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);
6
задан Aadit M Shah 26 November 2011 в 17:14
поделиться