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>
コメントされた最初の行は私には適切なようです(this
showLabel関数でキーワードを使用)。代わりにobjを使用する方法がわかりません。objは、実行時にobjが定義されていないため、その関数内でグローバル変数を参照する必要があります。私は2つのオブジェクトを作成しているので、この場合は両方が正常に表示されるだけでなく、objのコンテンツの古い値が適切に保存および参照されます。しかし、どのように?2番目のコメントのコメントを外すと、コメントが壊れて理由がわかります。ローカル変数について話しているのに、ローカル変数がないことをjsに明示的に伝えています。