如何在模块中创建JavaScript对象构造函数?
我正在尝试创建一个可重用的javascript对象(我想使用new)。当我尝试新建一个自定义对象时,出现错误: “org.myorg.sadp.section.sadpSection不是构造函数” 出于名称空间的原因,我正在模块化我的JS。我想知道这是否是问题所在:如何在模块中创建JavaScript对象构造函数?,javascript,Javascript,我正在尝试创建一个可重用的javascript对象(我想使用new)。当我尝试新建一个自定义对象时,出现错误: “org.myorg.sadp.section.sadpSection不是构造函数” 出于名称空间的原因,我正在模块化我的JS。我想知道这是否是问题所在: if (!window.org) var org = { myorg: {} }; if (!org.myorg) org["myorg"] = { sadp: {} }; if (!org.myorg.sadp) org.
if (!window.org) var org = { myorg: {} };
if (!org.myorg) org["myorg"] = { sadp: {} };
if (!org.myorg.sadp) org.myorg["sadp"] = {};
org.myorg.sadp.section = (function(ns) {
if (ns.section) {
return ns;
}
else {
ns.section = {};
}
ns.section.sadpSection = function(name) {
this.name = name;
this.isCompleted = false;
this.booleanQuestions = new Array();
this.multipleChoiceQuestions = new Array();
this.sliders = new Array();
return true;
}
return ns;
} (org.myorg.sadp))
这将导致以下错误:
var myObj = new org.myorg.sadp.section.sadpSection("test");
我做错了什么
谢谢 您基本上是在使
org.myorg.sadp.section
相等org.myorg.sadp
。这不是您想要的,它基本上是无限递归:
org.myorg.sadp.section == org.myorg.sadp.section.section
无论您添加多少个.section
s,情况都是如此。您可以将其更改为:
org.myorg.sadp.section =
{
sadpSection: function(name)
{
this.name = name;
this.isCompleted = false;
this.booleanQuestions = new Array();
this.multipleChoiceQuestions = new Array();
this.sliders = new Array();
}
}
您可以添加:
if(!org.myorg.sadp.section.sadpSection)
以避免重新指定构造函数
这并没有减少模块化。返回true也是不必要的。我最近写了一篇关于处理这种类型的模块系统的文章,您可能想签出它。您可以这样使用它:
ns('org.myorg.sadp.section');
org.myorg.sadp.section.load('sadpSection', function(name) {
this.name = name;
this.isCompleted = false;
// always better to use array literals than constructor
this.booleanQuestions = [];
this.multipleChoiceQuestions = [];
this.sliders = [];
return true;
});
但基本上,您要处理的问题是,您返回的是
ns
,而不是部分
您的问题是:
org.myorg.sadp.section = (function(ns) {
应该是:
org.myorg.sadp = (function(ns) {
也就是说,从
org.myorg.sadp.section=(函数(ns)
行中删除.section
,就可以设置了。