【问题标题】:Javascript "Object not a constructor" error when using namespaces?使用命名空间时出现Javascript“对象不是构造函数”错误?
【发布时间】:2010-07-20 16:18:28
【问题描述】:
我有以下JS代码:
window.Foo = {};
window.Foo.Name1 = function()
{
function Bar1(param1)
{
this.Name = param1;
}
}
var gMyBar = new Foo.Name1.Bar1("hello world");
alert(gMyBar.Name);
我在 Firefox 错误控制台中收到错误“Foo.Name1.Bar1 不是构造函数”...给出了什么?
【问题讨论】:
标签:
javascript
namespaces
【解决方案1】:
您对 JavaScript 中的“命名空间”感到困惑。 JavaScript 没有命名空间,只有对象和函数。您已将 Bar1 声明为函数 Name1 的闭包内的本地函数。它不是Name 的成员。我不确定你要在这里做什么,但我认为就是这样:
var Foo = {
Name1: {
Bar1: function(param1) {
this.Name = param1;
}
}
};
var gMyBar = new Foo.Name1.Bar1("hello world");
alert(gMyBar.Name); // hello world
【解决方案2】:
问题在于Bar1 是一个本地函数,仅在Name1 函数的范围内可用。
如果您想访问Bar1,您可以将Name1 设为另一个命名空间级别:
window.Foo = {};
window.Foo.Name1 = {
Bar1: function (param1) {
this.Name = param1;
}
};
var gMyBar = new Foo.Name1.Bar1("hello world");
alert(gMyBar.Name); // "hello world"