我知道不推荐使用全局对象,而使用AMD的整个理念是避免使用全局对象。但是对于一些旧代码,我必须在全局对象中定义一些内容。目前代码看起来像这样:
//example2.js
define(function(){
var globalObject = window;
globalObject.x = ...
globalObject.y = ...
});
它可以工作但是硬编码全局对象 window
看起来不太好,我很想知道是否有可能将其删除。当没有使用 define()
时,代码看起来像这样:
//example1.js
x = ...
y = ...
我知道,我知道你讨厌这段代码,但让我们言归正传:如何以结构化的方式在 define()
函数内部访问全局变量?我希望在传递给 define()
的函数中有一个类似于隐藏的最后参数,像这样:
//example3.js
define(function(globalObject){
globalObject.x = ...
globalObject.y = ...
});
甚至更简单的是:在该函数内,this
变量将指向全局对象。例如:
Or even simpler: the this
variable would point to the global object inside that function. For example:
//example4.js
define(function(){
this.x = ...
this.y = ...
});
注意:我不确定最后一个问题。在调用require()
时,研究传递给其的函数内部的this
变量显示它等于window
,这可能是我的问题的答案,但我尚未找到任何提及传递函数运行上下文的文档。也许它确实在全局变量的上下文中运行?
// iframe内的代码 define(['window'], function(win) { var topWin = win.top; // 操作iframe的window属性 win.foo = 1; console.log(win.foo); // 操作顶部窗口属性 topWin.foo = 2; console.log(topWin.foo); });
- Túbal Martínwindow
。 - gmanself
而不是 window。 - jpaugh