홈페이지 » 코딩 » JavaScript의 게터와 세터에 대한 궁극적 인 가이드

    JavaScript의 게터와 세터에 대한 궁극적 인 가이드

    게터세터 사용 된 함수 또는 메소드 도망세트 변수 값. getter-setter 개념은 다음과 같습니다. 컴퓨터 프로그래밍의 공통점: 거의 모든 고급 프로그래밍 언어에는 JavaScipt를 포함하여 getter 및 setter를 구현하는 구문 집합이 함께 제공됩니다..

    이 게시물에서는 getters setters가 무엇인지, 그리고 자바 스크립트에서 만들고 사용하기.

    Getters-setters 및 캡슐화

    getters 및 setters의 아이디어는 항상 언급됩니다 캡슐화와 함께. 캡슐화가 가능하다. 두 가지 방식으로 이해하다.

    첫째, 그것은 데이터 수집가 설정자 트리오를 사용하여 해당 데이터에 액세스하고 수정할 수 있습니다. 이 정의는 유효성 검사와 같은 일부 연산이 필요할 때 유용합니다. 데이터에 수행 저장하거나보기 전에 게터와 세터가 완벽한 홈을 제공합니다..

    둘째로, 캡슐화가 수행되는 방식에 따라 더 엄격한 정의가 있습니다. 데이터 숨기기, 다른 코드에서 접근 불가능하게 만들기, 게터와 세터를 제외하고. 이렇게하면 우리는 끝나지 않는다. 우연히 중요한 데이터를 덮어 쓴다. 프로그램에 다른 코드가있다..

    getter 및 setter 만들기

    1. 메서드 사용

    getter 및 setter는 기본적으로 함수 값을 가져 오거나 바꾼다. 하나 이상의 방법 그 (것)들을 창조하고 이용하기 위하여. 첫 번째 방법은 다음과 같습니다.

     var obj = foo : '이것은 foo의 값입니다.', getFoo : function () return this.foo; , setFoo : function (val) this.foo = val;  console.log (obj.getFoo ()); // "this는 foo의 값입니다."obj.setFoo ( 'hello'); console.log (obj.getFoo ()); // "여보세요"

    이것은 가장 간단한 방법 게터와 세터를 만들 수 있습니다. 재산이있다. 두 가지 방법이 있습니다. getFoosetFoo반환하고 값을 지정하십시오. 그 재산에.

    2. 키워드 포함

    더 “공무원” getter 및 setter를 만드는 강력한 방법은 도망세트 키워드.

    게터를 만든다., 두는 도망 예어 getter 메소드로 사용할 함수 선언 앞에 세트 예어 ~와 같은 방식으로 세터를 만들어라.. 구문은 다음과 같습니다.

     var obj = fooVal : '이것은 foo의 값입니다.', get foo () return this.fooVal; , set foo (val) this.fooVal = val;  console.log (obj.foo); // "this는 foo의 값입니다."obj.foo = 'hello'; console.log (obj.foo); // "여보세요" 

    데이터는 속성 이름으로 저장 (fooVal) 그게 다른 getter-setter 메소드의 이름에서) getter-setter를 보유하는 속성 데이터를 보유 할 수 없습니다. 게다가.

    어느 쪽이 더 낫다.?

    키워드로 getter 및 setter를 만드는 경우에는 할당 연산자를 사용하여 데이터 설정 그리고 도트 연산자를 사용하여 데이터 가져 오기, 일반 속성의 값에 액세스하거나 설정하는 것과 같은 방식입니다..

    그러나 getter 및 setter를 코딩하는 첫 번째 방법을 선택하면 setter 및 getter 메서드를 호출해야합니다 함수 호출 구문 사용 왜냐하면 그것들은 전형적인 함수이기 때문에 ( 도망세트 키워드).

    또한 실수로 끝날 수도 있습니다. 다른 값 지정하기 그 getter-setter 메소드를 보유한 속성에 완전히 잃어 버리다.! 나중의 방법에서 걱정할 필요가없는 것.

    그래서, 왜 내가 말했는지 알 수 있어요. 두 번째 기법은보다 견고하다..

    덮어 쓰기 방지

    어떤 이유로 첫 번째 기법을 선호하는 경우 getter-setter 메서드를 포함하는 속성을 만듭니다. 읽기 전용 그들을 창조함으로써 ~을 사용하여 Object.defineProperties. 경유로 생성 된 등록 정보 Object.defineProperties, Object.definePropertyReflect.defineProperty 자동 구성쓰기 가능 : false읽기 전용:

     / * 덮어 쓰기 방지 * / var obj = foo : '이것은 foo의 값입니다'; Object.defineProperties (obj,  'getFoo': value : function () return this.foo;, 'setFoo': value : function (val) this.foo = val;); obj.getFoo = 66; // getFoo는 덮어 쓰지 않을 것입니다! console.log (obj.getFoo ()); // "이것은 foo의 값입니다" 

    getter 및 setter 내부의 작업

    일단 게터와 세터를 도입하면, 앞으로 나아갈 수 있습니다. 데이터 조작을 수행한다. 변경하거나 반환하기 전에.

    아래 코드에서 getter 함수의 데이터는 다음과 같습니다. 문자열과 연결 반환되기 전에 setter 함수에서 값이 숫자인지 아닌지 여부 업데이트 전에 수행됩니다. .

     var obj = n : 67, get id () return 'ID는 다음과 같습니다.'+ this.n; , set id (val) if (typeof val === 'number') this.n = val;  console.log (obj.id); // "ID : 67"obj.id = 893; console.log (obj.id); // "ID : 893"obj.id = 'hello'; console.log (obj.id); // "ID : 893" 

    getter 및 setter를 사용하여 데이터 보호

    지금까지 캡슐화의 첫 번째 컨텍스트에서 getter 및 setter의 사용에 대해 설명했습니다. 두 번째로 이동해 봅시다. 외부 코드에서 데이터 숨기기 게터와 세터의 도움으로.

    보호되지 않은 데이터

    getter와 setter의 설정은 해당 메소드를 통해서만 데이터에 액세스하고 변경할 수 있음을 의미하지 않습니다. 다음 예에서는 직접 변경됨 getter 및 setter 메서드를 건드리지 않고 :

     var obj = fooVal : '이것은 foo의 값입니다.', get foo () return this.fooVal; , set foo (val) this.fooVal = val;  obj.fooVal = 'hello'; console.log (obj.foo); // "여보세요" 

    우리는 세터를 사용하지 않았지만 직접 데이터를 변경했습니다 (fooVal). 처음에 내부에서 설정 한 데이터 obj 이제 사라 졌어요! 이러한 일이 (실수로) 발생하지 않도록 약간의 보호가 필요하다. 귀하의 데이터. 추가 할 수 있습니다. 범위 제한 귀하의 데이터가있는 곳. 당신은 블록 범위 지정 또는 기능 범위 지정.

    1. 블록 범위 지정

    한가지 방법은 블록 범위 사용 그 안의 데이터는 방해 어느 키워드 범위를 제한하다 그 블록에.

    에이 블록 범위 코드를 배치하여 만들 수 있습니다. 중괄호 쌍 안쪽. 블록 범위를 만들 때마다 코멘트를 남겨주세요 그 위에는 중괄호가 남겨 지도록 요청 했으므로 아무도 괄호를 제거하다 실수로 코드에 여분의 중괄호가 있다고 생각하거나 레이블을 추가하십시오. 블록 범위로.

     / * BLOCK SCOPE, 중괄호를 남겨주세요! * / let fooVal = '이것은 foo의 값입니다.'; var obj = get foo () return fooVal; , set foo (val) fooVal = val fooVal = 'hello'; // 블록 안의 fooVal에 영향을주지 않습니다. console.log (obj.foo); // "이것은 foo의 값입니다"

    변경 / 생성 fooVal블록 바깥 영향을 미치지 않습니다. 그만큼 fooVal getters 세터 내부 참조.

    2. 기능 범위 지정

    범위 지정을 사용하여 데이터를 보호하는 가장 일반적인 방법은 데이터를 함수 내에 보관객체 반환하기 그 함수에서 얻은 getter와 setter.

     function myobj () var fooVal = '이것은 foo의 값입니다.'; return get foo () return fooVal; , set foo (val) fooVal = val fooVal = 'hello'; // 원래 fooVal에 영향을 미치지 않습니다. var obj = myobj (); console.log (obj.foo); // "이것은 foo의 값입니다"

    객체 ( foo () 그 안의 getter-setter)는 myobj () 기능은 에 저장된 obj, 그리고 obj 에 사용된다 getter와 setter를 호출하십시오..

    3. 범위 지정없이 데이터 보호

    또한 데이터를 덮어 쓰지 않도록 보호 할 수있는 또 다른 방법이 있습니다. 범위를 제한하지 않고. 그 뒤에있는 논리는 다음과 같습니다. 호출되는 것을 모르는 경우 어떻게 데이터 조각을 변경할 수 있습니까??

    데이터에 그렇게 쉽게 재현 할 수없는 변수 / 속성 이름, 기회는 아무도 (심지어 우리 자신조차도) 변수 / 속성 이름에 어떤 값을 할당함으로써 그것을 덮어 쓰게 될 것입니다.

     var obj = s89274934764 : '이것은 foo의 값입니다.', get foo () return this.s89274934764; , foo (val) this.s89274934764 = val;  console.log (obj.foo); // "이것은 foo의 값입니다" 

    봐, 그건 일을하는 한 가지 방법이야. 내가 선택한 이름이 실제로 좋은 이름은 아니지만, 임의의 값 또는 기호 사용 이 블로그 게시물에서 Derick Bailey가 제안한대로 속성 이름을 만들 수 있습니다. 주요 목표는 데이터를 숨겨둔 채로 유지하라. 다른 코드에서 가져 와서 getter-setter 쌍으로 액세스 / 업데이트하도록하십시오..

    getter 및 setter는 언제 사용해야합니까??

    이제 큰 의문이 생깁니다 : 게터와 세터 할당을 시작합니까? 모든 데이터에 지금?

    너라면 데이터 숨기기, 다음은 다른 선택의 여지가 없다..

    그러나 다른 코드에서 볼 수있는 데이터가 괜찮 으면 getters setters를 사용해야합니다. 그것을 코드와 함께 묶기 만하면된다. 그것에 몇 가지 작업을 수행합니까? 나는 말할 것이다. . 암호 곧 추가된다.. 자체 getter-setter로 개별 데이터의 마이크로 단위 만들기 특정 독립성을 제공합니다. 코드의 다른 부분에 영향을 미치지 않고 상기 데이터를 처리한다..