Javascript «Объект не конструктор» ошибка при использовании пространств имен? - PullRequest
2 голосов
/ 20 июля 2010

У меня есть следующий код JS:

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

    }

}


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

Я получаю сообщение об ошибке «Foo.Name1.Bar1 не является конструктором» в моей консоли ошибок Firefox ... что дает?

Ответы [ 2 ]

8 голосов
/ 20 июля 2010

Вы путаетесь с "пространствами имен" в 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
3 голосов
/ 20 июля 2010

Проблема в том, что 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...