<code>function Customer(name) { var risk = 0; this.name = name; } var customer = new Customer("aa"); console.log(customer.name); // aa console.log(customer.risk); // undefined </code>
customer.risk에는 액세스할 수 없지만 customer.name에는 액세스할 수 있는 이유는 무엇입니까?
risk는 누구의 개인 변수입니까? 그렇다면 고객은 왜 자신의 개인 변수에 액세스할 수 없습니까?
<code>function Customer(name) { var risk = 0; this.name = name; } var customer = new Customer("aa"); console.log(customer.name); // aa console.log(customer.risk); // undefined </code>
customer.risk에는 액세스할 수 없지만 customer.name에는 액세스할 수 있는 이유는 무엇입니까?
risk는 누구의 개인 변수입니까? 그렇다면 고객은 왜 자신의 개인 변수에 액세스할 수 없습니까?
이것은 사유재산이라고 부르는 것이 전혀 아닙니다. 이는 함수 내부에서 선언하는 변수일 뿐입니다. 속성이기 때문에 속성이 비공개인지 여부도 알 수 있습니다. 따라서 속성 자체에는 "그것이 누구에게 속해 있는가?"라는 질문이 있습니다. 생성자를 this.risk=0;으로 변경하면 여기에서 해당 속성의 소유자를 찾을 수 있습니다.
어떻게 그런 대답을 받아들일 수 있나요?
함수 생성자에서 var
을 사용하여 변수를 선언합니다. 이 변수는 클로저나 유사한 방법을 통해 노출되지 않으면 외부에서 액세스할 수 없습니다. 게다가 risk
은 customer
의 전용 변수가 아니고 customer
함수 객체와 관련이 있습니다. Customer
연산자를 사용하면 개체가 반환되고, 호출된 함수 생성자의 new
은 반환될 개체를 가리킵니다. 따라서 this
을 사용하여 선언한 속성은 반환된 개체에서 액세스할 수 있습니다. this
중. 이는 클로저가 함수이고 여기서는 객체라는 점을 제외하면 클로저와 다소 유사합니다. new
비공개 속성에 액세스할 수 있으면 비공개라고 부를 수 있다고 말씀하셨죠?