JS Object. preventExtensions (), Object. seal () 과 Object. freeze () 용법 사례 분석

7164 단어
본 논문 의 사례 는 JS Object. preventExtensions (), Object. seal () 과 Object. freeze () 의 용법 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다. 구체 적 으로 는 다음 과 같 습 니 다.
기본 소개
Method
Description
Param
Detail
Object.preventExtensions()
대상 을 확장 할 수 없 게 만 드 는 것 은 영원히 새로운 속성 을 추가 할 수 없다 는 것 이다.
Object
상세 하 다.
Object.isExtensible()
대상 이 확장 가능 한 지 판단 하기
Object
상세 하 다.
Object.seal()
대상 을 밀봉 하고 밀봉 한 대상 으로 되 돌려 줍 니 다.밀봉 대상 은 새로운 속성 을 추가 할 수 없고 기 존 속성 을 삭제 할 수 없 으 며 기 존 속성의 매 거 성, 설정 성, 쓰기 성 을 수정 할 수 없 지만 기 존 속성의 값 을 수정 할 수 있 는 대상 을 말한다.
Object
상세 하 다.
Object.isSealed()
대상 이 밀봉 되 었 는 지 아 닌 지 를 판단 하 다.
Object
상세 하 다.
Object.freeze()
대상 을 동결 하고 동 결 된 대상 으로 되 돌아 갑 니 다.동결 대상 은 새로운 속성 을 추가 할 수 없고 기 존 속성의 값 을 수정 할 수 없 으 며 기 존 속성 을 삭제 할 수 없 으 며 기 존 속성 을 수정 할 수 없 는 매 거 성, 설정 성, 쓰기 가능 한 대상 을 말한다.이 상 대 는 영원히 변 할 수 없다 는 것 이다.
Object
상세 하 다.
Object.isFrozen()
대상 이 동결 되 었 는 지 여 부 를 판단 하 다.
Object
상세 하 다.
2. Object. preventExtensions ()
Object. preventExtensions 는 한 대상 이 더 이상 자신의 속성 을 추가 하지 못 하 는 것 을 막 을 수 있 을 뿐 이 대상 의 원형 에 속성 을 추가 할 수 있 습 니 다.
2.1 preventExtensions () 설정

var jb51 = {
    name: "zuojj"
};
Object.preventExtensions(jb51);
jb51.url = "https://www.jb51.net";
//Outputs: undefined
console.log(jb51.url);


2.2 엄격 한 모드 에서 사용 하면 오류 발생
그러나 엄격 한 모델 에서 오 류 를 보고 할 수 있다.

"use strict";
var jb51 = {
    name: "zuojj"
};
Object.preventExtensions(jb51);
jb51.url = "https://www.jb51.net";
//Outputs: Uncaught TypeError: Can't add property url, object is not extensible
console.log(jb51.url);


2.3 속성 을 확장 할 수 없 지만 존재 하 는 속성 값 을 변경 할 수 있 습 니 다.

var jb51 = {
    name: "zuojj"
};
Object.preventExtensions(jb51);
jb51.url = "https://www.jb51.net";
//Outputs: Uncaught TypeError: Can't add property url, object is not extensible
console.log(jb51.url);


2.4 기 존 속성 삭제 (delete) 를 막 을 수 없습니다

var jb51 = {
    name: "jb51",
    url : "https://www.jb51.net"
};
Object.preventExtensions(jb51);
delete jb51.url;
//Outputs: {name: "jb51"}
console.log(jb51);


2.5 Object. defineProperty 방법 을 사용 하여 확장 할 수 없 는 대상 에 게 새로운 속성 을 추가 하면 이상 이 발생 합 니 다.

var jb51 = {
    name: "jb51"
};
Object.preventExtensions(jb51);
jb51 = Object.defineProperty(jb51, "url", {value: "https://www.jb51.net" });
//Outputs: Uncaught TypeError: Cannot define property:url, object is not extensible.
console.log(jb51);


2.6 대상 의 확장 여 부 를 판단 합 니 다.

var jb51 = {
    name: "jb51",
    url : "https://www.jb51.net"
};
Object.preventExtensions(jb51);
//Outputs: false
console.log(Object.isExtensible(jb51));


2.7 동결 대상 과 밀 폐 된 대상 은 모두 확장 불가 대상

var jb51 = {
    name: "jb51"
},
sealed = Object.seal(jb51),
frozen = Object.freeze(jb51);
//Outputs: false false
console.log(Object.isExtensible(sealed), Object.isExtensible(frozen));


3. Object. seal ()
3.1 속성 을 추가 할 수 없 지만 속성 값 을 변경 할 수 있 습 니 다.

var jb51 = {
    name: "zuojj",
    url: "https://www.jb51.net"
};
Object.seal(jb51),
jb51.sex = "male";
jb51.name = "jb51";
//Outputs: {name: "jb51", url: "https://www.jb51.net"}
console.log(jb51);


3.2 엄격 한 모델 에서 사용 하면 오류 가 발생 한다.
3.3 delete 기 존 속성 삭제 불가

var jb51 = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.seal(jb51),
delete jb51.name;
//Outputs: {name: "jb51", url: "https://www.jb51.net"}
console.log(jb51);


3.4 Object. defineProperty 대상 속성 확장 불가

var jb51 = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.seal(jb51);
Object.defineProperty(jb51, "sex", {value: "male"})
//Outputs: Uncaught TypeError: Cannot define property:sex, object is not extensible.
console.log(jb51);


위 에서 밀봉 대상 은 확장 할 수 없다 고 말 했 기 때문에 잘못 보고 할 수 있다.
3.5 대상 이 밀봉 대상 인지 판단

//             .
var empty = {};
//Outputs: false
console.log(Object.isSealed(empty));
//     &&      ===     .
Object.preventExtensions(empty);
//Outputs: true
console.log(Object.isSealed(empty));
//      &&               ,                     .
var hasProp = { fee: "fie foe fum" };
Object.preventExtensions(hasProp);
//Outputs: false
console.log(Object.isSealed(hasProp));
//              ,             .
Object.defineProperty(hasProp, "fee", { configurable: false });
//Outputs: true
console.log(Object.isSealed(hasProp));
console.log("-------------");
//                 ,      .
var s1 = {};
Object.seal(s1);
//Outputs: true
console.log(Object.isFrozen(s1));
var s2 = Object.seal({ p: 3 });
//Outputs: false
console.log(Object.isFrozen(s2)); //   "p"  


4. Object. freeze ()
4.1 속성 을 추가 할 수 없고 속성 값 을 수정 할 수 없습니다

var obj = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.freeze(obj);
obj.sex = "male";
obj.name = "zuojj";
//Outputs: {name: "jb51", url: "https://www.jb51.net"}
console.log(obj);


4.2 엄격 한 모델 에서 사용 하면 오류 가 발생 한다.
4.3 delete 기 존 속성 삭제 불가

var obj = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.freeze(obj);
delete obj.name;
//Outputs: {name: "jb51", url: "https://www.jb51.net"}
console.log(obj);


4.4 대상 동결 여부 판단

var obj = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.freeze(obj);
//Outputs: true
console.log(Object.isFrozen(obj));


호환성
Object. preventExtensions (), Object. isExtensible (), Object. seal (), Object. isSealed (), Object. freeze (), Object. isFrozen () 방법 은 ES5 규범 의 일부분 이 며 IE8 및 이하 저 버 전 브 라 우 저 는 지원 되 지 않 습 니 다.Oprea 는 지원 하지 않 습 니 다.
관심 있 는 친 구 는 온라인 HTML / CSS / JavaScript 코드 실행 도 구 를 사용 할 수 있 습 니 다.http://tools.jb51.net/code/HtmlJsRun상기 js 코드 를 테스트 실행 합 니 다.
자 바스 크 립 트 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기