gpt4 book ai didi

javascript - 如何在局部变量中包含 javascript 内容或在本地提供命名空间

转载 作者:行者123 更新时间:2023-11-30 17:20:58 24 4
gpt4 key购买 nike

假设我包含了 2 个 javascript X 和 Y,它们都包含一个具有不同功能的 commanNameFunction。我无权更改脚本 X 和 Y 的内容,以便我可以在那里应用模块化模式。现在的问题是之前在 X 中声明的函数被 Y 覆盖了。有什么方法可以在将它们包含在另一个 javascript 中的同时访问这两个函数。喜欢

var x = <script language="javascript" type="text/JavaScript" src="X.js"></script>
var y = <script language="javascript" type="text/JavaScript" src="Y.js"></script>

最佳答案

假设函数名称是 commanNameFunction,假设您不能更改内容,请将其作为一个可怕的 hack 来尝试。

<script language="javascript" type="text/JavaScript" src="X.js"></script>
<script language="javascript" type="text/JavaScript">
var commanNameFunctionFromX = commanNameFunction;
</script>
<script language="javascript" type="text/JavaScript" src="Y.js"></script>

现在如果你需要调用commanNameFunction,你可以这样调用它:

commanNameFunctionFromX()

如果您需要对整个脚本执行此操作,您最好尝试检测新对象。警告:这非常 hacky,如果您覆盖任何预定义函数,无疑会产生可怕的影响。

首先我们保存原始变量 - 在加载任何脚本之前运行它。

var existing = [];

for (var i in window) {
existing.push(i)
}

然后加载脚本,使用现有对象列表将任何新函数/对象保存到指定的命名空间。这个函数将主要执行此操作,并带有之前的黑客警告。

function saveNewToNamespace(existing, X) {
for (var i in window) {
if (window[i] && existing.indexOf(i) == -1) {
console.log("new: " + i);
X[i] = window[i];
window[i] = undefined;
}
}
}

然后,在每个新脚本之后,声明一个新变量并将新函数加载到其中。

var X = {};
saveNewToNameSpace(existing, X);

关于javascript - 如何在局部变量中包含 javascript 内容或在本地提供命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25133946/

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