javascriptでオブジェクトを作成するためのファクトリパターンを示すチュートリアルに従っています。次のコードは、なぜそれがうまく動作するかについて私は困惑しています。JavaScriptファクトリ変数の変数スコープ
<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>
最初のコメント行は、(showLabel機能でthis
キーワードを使用して)私には、適切と思われます。私はその場所でobjを使用することがどのように機能しているのかよくわかりません。 objはグローバル変数をどこかで参照する必要があります。なぜなら、その関数内で実行されるobjが定義されていないからです。私は2つのオブジェクトを作っているので、この場合は両方ともうまく表示されるだけでなく、objの内容の古い値が正しく格納され、参照されます。しかしどのように?私は2番目のコメントのコメントを外した場合、それは壊れ、私はなぜ今、私はローカル変数について話していることを明示的にjsに伝え、何もありません。
WHOAこれはすべて私が信じるように配線してきたことには全く反対です(でも面白いですが)。私は本当にあなたの入力を感謝します!私が最も援助したと思うことは、括弧が(変数を渡す)場合、私はそれを期待どおりに振る舞いますが、私がそれらを見ないと、私はより詳しく見ていなければなりません。 – Ankur