gpt4 book ai didi

javascript - 是否可以在 javascript 函数中将 namespace 作为参数传递?

转载 作者:行者123 更新时间:2023-12-02 17:46:53 25 4
gpt4 key购买 nike

我有 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 只是一个变量,当您调用它时,您指定该变量的类型,并且当您传递 "Page1" 时,它是a String 它只是一个字符串,与真正的 Page1 对象没有任何关系。但有一些选项可以帮助您。

您必须考虑的另一点是,您有 2 个或 3 个不同的 js 文件并不重要。重要的一点是,如果您的所有 JavaScript 代码都注入(inject)到单个 html 页面中,那么您可以将所有代码放在单个 window 上下文中的所有 JavaScript 文件中。因此,如果您在全局范围内定义了一些东西,即 window,您就可以通过 JavaScript 代码访问它。

看来您的 Page1Page2 是全局对象,因此您可以这样做:

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 对象的大小,但如果它是一个具有大量属性和内部对象的大对象,您应该重新考虑并更改您的解决方案。

关于javascript - 是否可以在 javascript 函数中将 namespace 作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21670661/

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