假设我已经包含了2个javascripts 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>
答案 0 :(得分:2)
假设函数名称为commanNameFunction
,假设您无法更改内容,请将其视为可怕的黑客。
<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);