views:

65

answers:

2

I have the following JS code:

window.Foo = {};
window.Foo.Name1 = function()
{
    function Bar1(param1)
    {
        this.Name = param1;

    }

}


var gMyBar = new Foo.Name1.Bar1("hello world");
alert(gMyBar.Name);

I'm getting the error "Foo.Name1.Bar1 is not a constructor" in my Firefox error console... what gives?

+3  A: 

The problem is that Bar1 is a local function, available only to the scope of the Name1 function.

If you want to access Bar1, you could make Name1 another namespace level:

window.Foo = {};
window.Foo.Name1 = {
  Bar1: function (param1) {
    this.Name = param1;
  }
};

var gMyBar = new Foo.Name1.Bar1("hello world");
alert(gMyBar.Name); // "hello world"
CMS
+3  A: 

You're confused about "namespaces" in JavaScript. JavaScript does not have namespaces, only objects and functions. You've declared Bar1 as a local function within the closure of the function Name1. It is not a member of Name. I'm not sure what you're going for here, but I think this is it:

var Foo = {
  Name1: {
    Bar1: function(param1) {
      this.Name = param1;
    }
  }
};

var gMyBar = new Foo.Name1.Bar1("hello world");
alert(gMyBar.Name); // hello world
bcherry
yep that idea is what im going for
Polaris878