我有3个.js文件。主Home.js和其他两个.js文件,例如Page1.js,Page2.js
Home.js:
var Home= {
Sample: function (pageId,data) {
pageId.MergePageData(data);
}
}
Page1.js:
var Page1 = {
MergePageData: function (data) {
// do something
}
}
Page2.js:
var Page2 = {
MergePageData: function (data) {
// do something
}
}
我尝试通过将其作为字符串传递来调用:
Home.Sample('Page1', 'data');
Home.Sample('Page2', 'data');
但是我想当它作为字符串传递时出现错误
“对象不支持属性或方法'MergePageData'”
我需要在两个不同的js文件中区分两个函数之间的调用。如何实现呢?
pageId
函数中的in只是一个变量,当您调用它时,您指定此变量的类型,并且在传递时"Page1"
(即a),String
它只是一个字符串,与实际Page1
对象无关。但是有些选项可以为您提供帮助。
您还需要考虑的另一点是,有2个或3个不同的js文件都没关系。重要的一点是,如果将所有JavaScript代码都注入到单个html页面中,则可以在单个window
上下文中将所有JavaScript文件中的所有代码都包含在内。因此,如果您在全局范围内定义,则window
可以在所有JavaScript代码中进行访问。
似乎您Page1
和Page2
是全局对象,因此您可以执行以下操作:
var Home= {
Sample: function (pageId,data) {
window[pageId].MergePageData(data);
}
}
但是我猜data
vriable不是全局变量,您有2个选择,首先将其设置为全局变量,或者仅将其存储在类似以下的存储中:
localStorage.setItem("data", JSON.stringify(data));
然后Sample
像这样更改您的功能:
var Home= {
Sample: function (pageId,data) {
window[pageId].MergePageData(JSON.parse(localStorage.getItem("data")));
}
}
尽管您必须非常注意data
对象的大小,但是如果它是一个具有许多属性和内部对象的大对象,则应重新考虑并更改解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句