gpt4 book ai didi

javascript - 使用 requirejs 时访问全局对象

转载 作者:可可西里 更新时间:2023-11-01 02:31:07 25 4
gpt4 key购买 nike

我知道不建议使用全局对象,使用 AMD 的整个想法是避免使用全局对象。但是对于一些遗留代码,我必须在全局对象中定义一些东西。目前代码如下所示:

//example2.js
define(function(){
var globalObject = window;
globalObject.x = ...
globalObject.y = ...
});

它可以工作,但是对全局对象 window 进行硬编码看起来不太好,我很好奇是否可以删除它。当未使用 define() 时,代码如下所示:

//example1.js
x = ...
y = ...

我知道,我知道你讨厌这段代码,但让我们开门见山:如何在 requirejs 的 define() 函数中以结构化的方式访问全局变量?我希望传递给 define() 的函数有一个隐藏的最后一个参数,如下所示:

//example3.js
define(function(globalObject){
globalObject.x = ...
globalObject.y = ...
});

或者更简单:this 变量将指向该函数内的全局对象。例如:

//example4.js
define(function(){
this.x = ...
this.y = ...
});

注意:我不确定最后一个。调查传递给 require() 的函数内的 this 变量说它等于 window 这可以回答我的问题,但我一直没能找到任何提到所传递函数正在运行的上下文的文档。也许它毕竟是在全局变量的上下文中运行的?

最佳答案

我建议您创建一个返回 window 对象的模块。这对于单元测试目的(模拟依赖项)特别有用。

window.js

define(function(){
return window;
});

app.js

define(['window'], function(win) {
// Manipulate window properties
win.foo = 1;
console.log(win.foo);
});

关于javascript - 使用 requirejs 时访问全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15448233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com