Я знаю, что не рекомендуется использовать глобальный объект, и вся идея использования AMD заключается в том, чтобы избежать использования глобального объекта. Но для некоторого устаревшего кода я должен определить некоторые вещи в глобальном объекте. В настоящее время код выглядит следующим образом:
//example2.js
define(function(){
var globalObject = window;
globalObject.x = ...
globalObject.y = ...
});
Это работает, но жесткое кодирование глобального объекта window
выглядит не очень красивым, и мне любопытно узнать, можно ли его удалить. Когда define()
не использовался, код выглядел следующим образом:
//example1.js
x = ...
y = ...
Я знаю, я знаю, что вы ненавидите этот код, но давайте быть в курсе: как можно получить глобальную переменную структурированным образом внутри функции define()
в requirejs? Мне жаль, что функция, которая передается в define()
, есть что-то вроде скрытого последнего параметра:
//example3.js
define(function(globalObject){
globalObject.x = ...
globalObject.y = ...
});
Или даже проще: переменная this
будет указывать на глобальный объект внутри этой функции. Например:
//example4.js
define(function(){
this.x = ...
this.y = ...
});
Примечание: Я не уверен в этом последнем. Расследование переменной this
внутри функции, переданной в require()
, говорит о том, что она равна window
, что может быть ответом на мой вопрос, но я не смог найти документацию, в которой упоминается контекст, который выполняется переданная функция. Может быть, он работает в контексте глобальной переменной?