2014-05-24 2 views
0

example of encapsulation에서 name은 9 행의 개인 변수 _name에 할당 된 이유는 무엇입니까? 그것은 .. 라인 2 이후, name 이미 _name에 할당하고 _name 또는 name에 변경된 내용이 없습니다,이 캡슐화 예제에서 private 변수가 두 번 할당되는 이유는 무엇입니까?

을 나에게 중복 보인다 아니면이 잘못 읽고있다 및 name 민간 변수?

function Person(name) { 
    var _name = name; 
    return { 
     name: function (name) { 
      if(!name) { 
       return _name; 
      } 

      _name = name; 
     } 
    }; 
} 

답변

1

name의가 있습니다. 하나는 function Person의 매개 변수이며 _name 값이 생성되고 초기화됨을 나타냅니다. 두 번째 매개 변수는 개체의 name 멤버로 저장된 익명의 function에 대한 매개 변수이며, 개인 변수의 값을 업데이트하거나 제공되지 않으면 현재 값을 가져 오기 위해 getter/setter로 전달되는 매개 변수입니다.

var someone = new Person("alice"); 
someone.name("bob"); 
console.log(someone.name()); // output: bob 
+0

이 좋아, 그래서 내가 제대로 이해한다면 : 고려 함수의'if' 부분이 게터는'if' 아래 부분입니다 것은 세터의 외부 부분이다'return'은을 만드는 것입니다 새로운 인스턴스와 익명의 함수는'_name'을 비공개로 유지하는 것입니다. 그게 맞습니까? –

+0

@ 샘 예, 맞습니다. – delnan