2009-02-16 2 views
1

Я принимаю существующую библиотеку JS я написал некоторое время назад, и пытаюсь организовать его под общим пространством имен ... Вот пример техники я пытаюсь использовать:Javascript Namespacing, где синтаксическая ошибка?

var NameSpace = new function() 
{ 
    var privateMember = []; 

    function privateMethod() {}; 


    return 
    {  
     PublicMethod1 : function(arg, arg2) 
     { 
      // etc 
     }, 
     PublicMethod2 : function() 
     { 
      // etc 
     }, 
     PublicMethod3 : function(arg, arg2) 
     { 
      // etc 
     } 
    }; 

}(); 

С что я могу сказать, что это должно работать отлично, но я получаю ошибку синтаксиса на этой линии:

PublicMethod1 : function(arg, arg2) 

можно ли увидеть некоторые очевидные проблемы с этой техникой?

ответ

9
var NameSpace= function() 
{ 
    var privateMember = new Array(); 

    function privateMethod() { }; 

    return {   
     PublicMethod1 : function(arg, arg2) 
     { 
       // etc 
     }, 
     PublicMethod2 : function() 
     { 
       // etc 
     }, 
     PublicMethod3 : function(arg, arg2) 
     { 
       // etc 
     } 
    }; 

}(); 

Проблема была реальной хитростью, возвращением и {должна быть на одной линии, видимо. Также новый [] был недействителен, я исправил это и для вас.

+0

Это несколько смешно, что JS является «непрозрачным агностиком», пока это не так. – FlySwat

+1

JavaScript не требует точки с запятой в конце строки, поэтому при установке открытой скобки на следующей строке функция возвращалась до того, как она достигла скобки. Я был сожжен этой же самой добычей. –

+0

Вы не должны писать '' 'на новой строке. – akaRem

0

просто краткое примечание о назначении массива.

Это работает: var privateMember = new Array();

И это работает, тоже: var privateMember = [];

Конечно, это вовсе не так: var privateMember = new [];

Создание синглтон от закрытия, как в оригинале (исправление для позиционирования возврата) является совершенно приемлемым и не требует создания объекта, как во втором комментарии