Я пытался улучшить свой код javascript, создав пространство имен для своего кода, чтобы не было глобальных переменных / столкновений функций, а также поместил все в пространство имен в анонимную функцию, чтобы все было приватно, если явно не указано иное. через заявление о возврате.
Atm, я получаю «Uncaught Type Error: объект не является функцией»
var Namespace = (function() {
//private variables/functions
var a;
var b;
function priv_func1() {
//do stuff
}
//public variables/functions
return {
pub_var1: b,
pub_func1: function() {
//do stuff
}
};
})();
$(document).ready(function() {
var myName = new Namespace();
myName.pub_func1();
}
Поэтому, когда я удаляю () в конце определения Пространства имен, которое превращает объявление функции в выражение функции, я не получаю ошибки, но в примерах, которые я видел, там есть (), поэтому я мне интересно, что происходит.
Я также поместил это в начало определения пространства имен, чтобы исправить, когда пользователь случайно пропустил новое ключевое слово.
if (!(this instanceof Namespace))
return new Namespace();
РЕДАКТИРОВАТЬ: Кроме того, я должен поставить функцию готовности документа до или после определения пространства имен.