使用命名空间时,Javascript“对象不是构造函数”错误?

时间:2010-07-20 16:18:28

标签: javascript namespaces

我有以下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不是构造函数”...给出了什么?

2 个答案:

答案 0 :(得分:8)

你对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

答案 1 :(得分:3)

问题是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"