【问题标题】: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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-23
      • 2021-03-27
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 2014-05-30
      相关资源
      最近更新 更多