★ 06. 개체

5867 단어
간단 한 소개
  • 자 바스 크 립 트 의 대상 은 동적 이 고 속성 은 삭제 할 수 있 으 며 정적 대상 과 정적 유형 언어의 구조 체 를 모 의 하 는 데 자주 사 용 됩 니 다.
  • 류: 표지 대상 유형의 문자열.
  • 확장 태그: 새로운 속성 을 추가 할 수 있 습 니까?
  • 대상 의 종 류 는 내 장 된 대상, 숙주 대상 (숙주 환경 에서 정의 하여 내 장 된 대상 으로 할 수 있 음), 사용자 정의 대상 이 있다.
  • 대상 도 관련 배열, 해시, 맵, 사전 이다.

  • 세 가지 생 성 방식
    대상 직접 량
    var empty = {};
    
    var abc = {
        abcdef: "str",          //            
        "abcdef": 123,          //            
        "abc def": 123,         //                
        'abc-def': true         //                 
    };
    
    new
    function Point(x, y) {
        this.x = x;
        this.y = y;
    }
    
    var p = new Point(1, 1);
    
    //                ,      
    new Object
    new Date
    
    Object.create()
  • ES 5 정의 Object.create().
  • 간단 한 예:
  • var o1 = Object.create({x : 1, y : 2});     //    o1  ,o1     x y
    var o2 = Object.create(null);               //    o2  ,o2          
    var o3 = Object.create(Object.prototype);   //    o3  ,o3 {} new Object()  
    
  • ES 3 에서 다음 과 같은 수단 으로 시 뮬 레이 션 한다.
  • function inherit(p) {
        if (p === null) throw TypeError();
        if (Object.create) return Object.create(p);
    
        var t = typeof p;
    
        if (t !== "object" && t !== "function") throw TypeError();
        function f() {
        }
    
        f.prototype = p;
        return new f();
    }
    
  • 상기 중의 inherit() 라 이브 러 리 함수 가 의도 치 않 게 수정 되 는 것 을 방지 하 는 역할 을 한다.
  • var o = {x : "don't change this value"};
    library_function(inherit(o));           //             ,        o
    

    서열 화 대상
  • 대상 의 직렬 화 는 대상 의 상 태 를 문자열 로 바 꾸 는 것 을 말한다.
  • ES 5 는 JSON.stringify()JSON.parse() 를 직렬 화 와 반 직렬 화 자 바스 크 립 트 대상 으로 제공 했다.
  • JSON.stringify()JSON.parse() 모두 두 번 째 선택 가능 한 매개 변 수 를 받 아들 일 수 있 습 니 다. 직렬 화 또는 반 직렬 화 된 속성 목록 을 전송 하여 사용자 정의 직렬 화 또는 반 직렬 화 작업 을 맞 출 수 있 습 니 다.
  • 직렬 화 와 반 직렬 화 규칙:
  • 대상, 배열, 문자열, 유한 숫자, true, false, null 직렬 화 와 반 직렬 화 를 할 수 있다.
  • NaN, Infinity, -Infinity 직렬 화 결과 null 로 나 타 났 다.
  • Data 대상 은 ISO 형식의 날짜 문자열 로 정렬 되 고 Data 대상 이 아 닌 문자열 로 정렬 됩 니 다.
  • 함수, RegExp 대상, Error 대상 과 undefined 직렬 화 또는 반 직렬 화 할 수 없습니다.
  • JSON.stringify() 직렬 화 대상 이 매 거 할 수 있 는 자체 속성 만 있 을 수 있 고 직렬 화 할 수 없 는 속성 은 생략 된다.


  • 계승 하 는 방법Object 방법
  • 기본 toString() 은 유용 한 정 보 를 많이 출력 하지 않 습 니 다.
  • 여러 가지 유형 은 사용자 정의 toString(), 예 를 들 어 배열, 함수 와 toString() 대상 등 을 가진다.
  • Data 방법
  • 보통 toLocaleString()toLocaleString() 만 호출 하고 해당 하 는 값 을 되 돌려 줍 니 다.
  • toString() 대상 과 Data 대상 은 현지 화 수요 가 있어 모든 맞 춤 형 제작 을 했다.
  • 배열 의 Number 은 배열 의 toLocaleString() 를 호출 하고 해당 하 는 값 을 되 돌려 주 는 것 이 아니 라 각 요소 의 toString() 를 호출 하여 해당 하 는 값 을 되 돌려 준다.
  • toString() 방법
  • 보통 정의 toJSON() 방법 이 없 지만 정의 되면 toJSON() 호출 됩 니 다.
  • JSON.stringify() 방법
  • 숫자 로 변환 할 때 사용 합 니 다.

  • 대상 의 세 가지 속성
    원형 속성
  • 원형 속성 은 이 대상 이 계승 하 는 대상 을 기록 하고 있다.
  • 원형 속성 은 인 스 턴 스 대상 이 만 들 기 전에 설정 되 어 있 습 니 다.
  • ES 5 에 서 는 valueOf() 를 이용 해 대상 의 원형 을 조회 할 수 있다.
  • 한 대상 이 다른 원형 인지 확인 하기 위해 Object.getPrototypeOf() 을 사용 할 수 있다.

  • 클래스 속성
    약술 하 다
  • 대상 의 클래스 속성 은 대상 의 유형 정 보 를 나타 내 는 문자열 입 니 다.
  • 사용자 정의 대상 의 클래스 속성 은 모두 Object.isPrototypeOf() 이 며, 대상 을 구분 할 수 없 는 클래스 는 내 장 된 대상 의 클래스 속성 과 다 릅 니 다
  • .
  • 이 속성 을 직접 조회 하 는 방법 은 없고 간접 적 인 조회 방법 만 있 습 니 다. Object 되 돌아 오 는 문자열 의 8 번 째 부터 마지막 두 번 째 위치 사이 의 문 자 를 추출 하여 toString() 도구 함수
  • 를 사용 할 수 있 습 니 다.
    단순 예시
    function classof(o) {
        if (o === null) return "Null";
        if (o === undefined) return "undefined";
        return Object.prototype.toString.call(o).slice(8, -1);
    }
    
    classof(null)               // "Null"
    classof(1)                  // "Number"
    classof("")                 // "String"
    classof(false)              // "Boolean"
    classof({})                 // "Object"
    classof([])                 // "Array"
    classof(/./)                // "RegExp"
    classof(new Date())         // "Date"
    classof(window)             // "Window" (a client-side host object)
    function f() { };
    classof(new f());           // "Object"
    

    확장 성
    약술 하 다
  • 대상 의 확장 성 은 대상 에 게 새로운 속성 을 추가 할 수 있 는 지 여 부 를 나타 낸다.
  • 모든 내 장 된 대상 과 사용자 정의 대상 은 명시 적 으로 확장 할 수 있 고 숙주 대상 의 확장 성 은 자바 Sctipt 엔진 에 의 해 정의 된다.
  • classof()
  • 대상 을 확장 가능 에서 확장 불가 로 전환 하 는 데 사용한다.
  • 이 조작 은 거 스 를 수 없다.
  • 이 대상 이 확장 불 능 으로 전환 되면 속성 을 직접 추가 할 수 없 지만 원형 대상 에 속성 을 추가 하면 이 대상 은 새로 추 가 된 계승 속성 을 계승 합 니 다.
  • 대상 의 확장 성 을 측정 하기 위해 Object.preventExtensions() 을 사용 할 수 있다.

  • Object.isExtensible()
  • 대상 을 확장 가능 에서 확장 불가 로 전환 하고 모든 자체 속성 을 설정 불가 로 설정 합 니 다.
  • 이 조작 은 거 스 를 수 없다.
  • 대상 의 폐쇄 여 부 를 검사 하기 위해 Object.seal() 사용 할 수 있다.

  • Object.isSealed()
  • 대상 을 확장 가능 에서 확장 불가 로 전환 하고 모든 자체 속성 을 설정 할 수 없 는 것 으로 설정 하 며 모든 자체 데이터 속성 을 읽 기 전용 으로 설정 하 며 액세스 기 속성 은 여전히 쓸 수 있 습 니 다.
  • 이 조작 은 거 스 를 수 없다.
  • 대상 의 동결 여 부 를 측정 하기 위해 Object.freeze() 사용 할 수 있다.

  • 좋은 웹페이지 즐겨찾기