자바 스크립트에서 객체를 생성하는 팩토리 패턴을 보여주는 자습서를 따르고 있습니다. 다음 코드는 왜 그것이 작동하는지에 관해서 난처하게했습니다.자바 스크립트 팩토리 패턴 변수 범위 지정
<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의 내용에 대한 이전 값이 저장되고 참조된다. 하지만 어떻게? 내가 두 번째 주석의 주석을 없애면 깨지고 그 이유를 알게되어 현재 로컬 변수에 대해 이야기하고 있으며 아무 것도 없다는 것을 명시 적으로 알려줍니다.
우연히 이것은 유감스럽게 생각하는 것에 매우 반대입니다 (그러나 그럼에도 불구하고 흥미 롭습니다). 정말 당신의 의견을 주셔서 감사합니다! 내가 가장 도움이되었다고 생각하는 것은 내가 (변수를 전달하면) 괄호를 보면 예상대로 동작하지만 괄호를 보지 않으면 자세히 살펴 봐야한다는 것입니다. – Ankur