ECMAScript 5 개체 및 속성 (1)

8908 단어 properties
  • 원본: http://ejohn.org/blog/ecmascript-5-objects-and-properties/
  •    @by: Aaron
        일부 새로운 API 는 규범 에 포함 되 어 있 지만, 더 많은 재 미 있 는 기능 을 발휘 하 는 것 은 대상 / 속성 코드 입 니 다. 당신 의 대상 을 어떻게 사용 하 는 지, 개인 적 인 "getters" 와 "settses" 를 통 해 매 거, 조작, 삭 제 를 막 거나 새로운 속성 을 추가 하 는 것 을 방지 하 는 것 입 니 다. 쉽게 말 하면 기 존의 자 바스 크 립 트 기반 api (예 를 들 어 DOM) 를 복사 하고 확장 할 수 있 습 니 다. 자 바스 크 립 트 자체 만 사용 할 수 있 습 니 다.
    아마도 가장 중요 한 것 은 이러한 특성 이 모든 주요 브 라 우 저 에 도착 할 것 이다.모든 주요 브 라 우 저 업 체 는 규범 에 종사 하고 그들 각자 의 엔진 을 실시 하 는 것 에 동의 한다.그러나 정확 한 시간 표 는 아직 밝 혀 지지 않 았 지만 더 늦 은 것 이 아니 라 이 를 것 으로 보인다.
    ES5 는 이 점 에서 아직 완전무결 하 게 실현 되 지 않 은 것 같 지만 일부 작품 이 있다.이 기간 동안 ECMAScript 5 규범 을 읽 을 수 있 습 니 다.
    Objects
    ECMAScript 5 의 새로운 특징 은 확장 대상 이 전 환 될 수 있다 는 것 이다.확장 성 을 닫 으 면 새로운 속성 이 대상 에 추가 되 는 것 을 방지 할 수 있 습 니 다.Object.preventExtensions( obj ) Object.isExtensible( obj )
    preventExtensions 는 대상 을 잠 그 고 미래의 속성 과 충돌 하 는 것 을 막 습 니 다.
    isExtensible 은 현재 대상 의 확장 성 을 확인 하 는 방법 입 니 다.
    예제 용법:
    var obj = {};
     
    obj.name = "John";
    print( obj.name );
    // John
     
    print( Object.isExtensible( obj ) );
    // true
     
    Object.preventExtensions( obj );
     
    obj.url = "http://ejohn.org/"; // Exception in strict mode
     
    print( Object.isExtensible( obj ) );
    // false

    속성 과 설명자:
    속성 은 이미 철저하게 전복 되 었 다.더 이상 간단 한 값 관련 대상 이 아 닙 니 다. 당신 은 지금 어떻게 표현 하 는 지 완전히 통제 하고 있 습 니 다.이 능력 으로 복잡성 을 증가 시 켰 지만.  
    대상 속성 은 두 부분 으로 나 뉜 다.
    실제 'meat' 의 한 속성 에 대해 두 가지 가능성 이 있 습 니 다. 하나의 값 (, 우리 ECMAScript 3 은 알 고 있 습 니 다. 하나의 '데이터' 속성 - 이것 은 전통 적 인 값 입 니 다) 이나 Getter 와 Setter (일부 현대 브 라 우 저 에서 알 고 있 습 니 다. 하나의 '방문' 속성 은 Gecko 와 WebKit 와 같 습 니 다) 입 니 다.
  • Value 는 이 속성의 값 을 포함 합 니 다.
  •  
  • Get 함수 가 호출 될 때 이 속성의 값 이 접근 합 니 다.
  • Set 호출 함수, 이 속성의 값 은 변 경 됩 니 다.

  • 그리고 속성 은...
    Writable. false 라면 이 속성의 값 을 변경 할 수 없습니다. Configurable. flase 라면 이 속성 을 삭제 하거나 변경 하려 는 시도 (Writable, Configurable, or Enumerable) 가 실 패 됩 니 다. Enumerable. true 라면 for (var prop in obj) {} (다른 비슷 한 기능 을 사용 하고 있 음) 를 사용 하면 이 속성 을 옮 겨 다 닐 수 있 습 니 다 이 서로 다른 속성 들 은 속성 설명 자 를 완전히 보완 한다.예 를 들 어 간단 한 설명 자 는 다음 과 유사 할 수 있 습 니 다.
    {
      value: "test",
      writable: true,
      enumerable: true,
      configurable: true
    }

    이 세 가지 속성 (writable, enumerable, and configurable) 은 모두 선택 할 수 있 습 니 다. 모든 기본 값 은 true 입 니 다.
    new  Object.getOwnPropertyDescriptor Object.getOwnPropertyDescriptor( obj, prop )
    이 방법 은 설명자 의 속성 에 접근 할 수 있 습 니 다.이 방법 은 이러한 정 보 를 얻 는 유일한 방법 입 니 다. (그렇지 않 으 면 사용자 에 게 제공 되 지 않 습 니 다. 보 이 는 속성 이 존재 하지 않 습 니 다. 내부 에 저 장 된 ECMAScript 엔진)
    예제 사용:
    var obj = { foo: "test" };
     
    print(JSON.stringify(
      Object.getOwnPropertyDescriptor( obj, "foo" )
    ));
    // {"value": "test", "writable": true,
    //  "enumerable": true, "configurable": true}
    Object.defineProperty( obj, prop, desc )
    이 방법 은 대상 에서 (또는 존재 하 는 속성 을 변경) 새로운 속성 을 정의 할 수 있 습 니 다. 이 방법 은 속성 설명 자 를 받 아들 여 속성 을 초기 화 (업데이트) 합 니 다.
    예제 사용:
    var obj = {};
     
    Object.defineProperty( obj, "value", {
      value: true,
      writable: false,
      enumerable: true,
      configurable: true
    });
     
    (function(){
      var name = "John";
     
      Object.defineProperty( obj, "name", {
        get: function(){ return name; },
        set: function(value){ name = value; }
      });
    })();
     
    print( obj.value )
    // true
     
    print( obj.name );
    // John
     
    obj.name = "Ted";
    print( obj.name );
    // Ted
     
    for ( var prop in obj ) {
      print( prop );
    }
    // value
    // name
     
    obj.value = false; // Exception if in strict mode
     
    Object.defineProperty( obj, "value", {
      writable: true,
      configurable: false
    });
     
    obj.value = false;
    print( obj.value );
    // false
     
    delete obj.value; // Exception

    Object. defineProperty 는 새로운 ECMAScript 버 전에 서 핵심 적 인 방법 입 니 다. 거의 모든 주요 기능 의 실현 은 이 방법 에 의존 합 니 다.Object.defineProperties( obj, props )
     
    하나의 속성 을 동시에 정의 한 다 는 뜻 이다.
    Object.defineProperties = function( obj, props ) {
      for ( var prop in props ) {
        Object.defineProperty( obj, prop, props[prop] );
      }
    };
    var obj = {};
     
    Object.defineProperties(obj, {
      "value": {
        value: true,
        writable: false
      },
      "name": {
        value: "John",
        writable: false
      }
    });

    ECMAScript 5 의 새로운 기능 에서 속성 설명자 (및 관련 방법) 가 가장 중요 할 수 있 습 니 다. 개발 자 들 이 대상 을 세밀 하 게 제어 하고 환 영 받 지 못 하 는 수정 을 방지 하 며 통 일 된 네트워크 호 환 API 를 유지 할 수 있 도록 합 니 다.
     

    좋은 웹페이지 즐겨찾기