Я следую учебнику, в котором отображается шаблон фабрики для создания объектов в javascript. Следующий код меня озадачил, почему он работает.Javascript factory pattern variable scoping
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>6-2.htm</title>
</head>
<body>
<script type="text/javascript">
function createAddress(street, city, state, zip) {
var obj = new Object();
obj.street = street;
obj.city = city;
obj.state = state;
obj.zip = zip;
obj.showLabel = function() {
//alert(this.street + "\n" + this.city + ", " + this.state + " " + this.zip);
//var obj;
alert(obj.street + "\n" + obj.city + ", " + obj.state + " " + obj.zip);
};
return obj;
};
var JohnAddr = createAddress("12 A St.", "Johnson City", "TN", 37614);
var JoeAddr = createAddress("10061 Bristol Park", "Pensacola", "FL", 32503);
JohnAddr.showLabel();
JoeAddr.showLabel();
</script>
</body>
</html>
первый комментарий линия кажется адекватной для меня (используя this
ключевое слово в функции showLabel). Я не уверен, как работает obj на своем месте. obj должен был бы ссылаться на глобальную переменную где-то, потому что внутри этой функции, когда ее прогон не определен obj, правильно? так как я делаю 2 объекта, это не просто удача в этом случае, чтобы оба они отображались в порядке, старые значения для содержимого obj сохраняются и ссылаются правильно. но как? если я раскомментирую второй комментарий, тогда он ломается, и я понимаю, почему, теперь я явно указываю js, что я говорю о локальной переменной, и нет.
образец прототипа более элегантный, я согласен. я шел из академического POV, и мне хотелось узнать, почему работает заводская модель. благодаря! – Ankur 2010-12-10 17:22:15