Почему созданный в модуле объект не видит глобальный?

Привет. Разбираюсь с паттерном "Модуль" и тем как писать свои библиотеки. Не могу понять, почему созданный модулем объект не видит глобальный. Вот примерно так я создаю модули:
(function() {
	function Obj(a, b) {
		// здесь что-нибудь
	}
	
	Obj.prototype.makeSomething = function() {
		console.log(Lib);
	}
	
	function Lib() {
		// и здесь что-нибудь
	}
	
	Lib.prototype.makeObj = function() {
		return new Obj();
	}
	
	window.Lib = new Lib();
}());


Затем, с помощью уже глобального объекта Lib я создаю объекты класса Obj с помощью метода make. Теперь я хочу использовать метод makeSomething созданного объекта в котором я хочу использовать какой-нибудь метод объекта Lib. Но метод "makeSomething" не видит Lib, он выведет не объект а исходный код, вот так:
function Lib() {
		
}


Подскажите в чём ошибка и как правильно писать библиотеки так, чтобы можно было создавать с их помощью объекты и пользоваться методами этих библиотек? Разбирался с замыканиями но видимо ничего не понял...
  • Вопрос задан
  • 183 просмотра
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Потому что в этом месте существует переменная Lib, содержащая одноимённую функцию. Либо переименуйте функцию, либо в makeSomething() обращайтесь к нужному объекту так же через window.

Интерпретатор, при доступе к переменной, сначала пытается найти переменную в текущем LexicalEnvironment, а затем, если её нет – ищет во внешнем объекте переменных. В данном случае им является window.
learn.javascript.ru/closures
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы