자바 script 에서 Object.freeze()를 어떻게 사용 하 는 지 자세히 알 아 보기
4019 단어 JavascriptObject.freeze()
Object.freeze()방법 은 대상 을 동결 할 수 있 습 니 다.동 결 된 대상 은 더 이상 수정 할 수 없다.대상 을 동결 하면 이 대상 에 게 새로운 속성 을 추가 할 수 없습니다.기 존 속성 을 삭제 할 수 없습니다.이 대상 의 기 존 속성의 매 거 성,설정 성,쓰기 성,기 존 속성의 값 을 수정 할 수 없습니다.또 한 대상 을 동결 한 후 이 대상 의 원형 도 수정 할 수 없다.freeze()는 들 어 오 는 매개 변수 와 같은 대상 을 되 돌려 줍 니 다.
사용법
const objectExample = {
prop1: 20,
prop2: " "
};
// ,
objectExample.prop1 = 100;
console.log(objectExample.prop1)
//
Object.freeze(objectExample);
objectExample.prop2 = "Alice" // ,
console.log(objectExample.prop2);
결실비 엄격 모드
엄격 한 모드 추가
"use strict";
이상 알림 던 지기 이 속성 은 읽 기 전용 입 니 다.
깊이 동결
주의해 야 할 것 은 동 결 된 대상 이 대상 을 값 으로 하 는 속성 을 가지 고 있다 면 이 대상 들 은 변 경 될 수 있다 는 것 이다.
const theObject = {
x: 1,
z: 2,
y: {
a: "Hello",
b: " "
}
}
Object.freeze(theObject);
theObject.x = 100
console.log(theObject.x);
theObject.y.a = 'vipbic';
console.log(theObject.y.a);
결실대상 의 1 층 은 동결 되 었 으 나 2 층 은 동결 되 지 않 았 다.이것 은 우리 가'얕 은 동결'만 실현 했다 는 것 을 의미한다.
동결 대상 의 모든 속성(다른 대상 을 값 으로 저장 하 는 속성 포함)을 통 해 대상 을 변 하지 않 게 하려 면'깊이 동결'을 실행 해 야 합 니 다.즉,재 귀 를 사용 하여 부모 대상 을 동결 하기 전에 하위 대상 을 동결 해 야 합 니 다.
순환 동결
const theObject = {
x: 1,
z: 2,
y: {
a: "Hello",
b: " "
}
}
const deepFreeze = (obj) => {
const propNames = Object.getOwnPropertyNames(obj)
for (const name of propNames) {
const value = obj[name];
if (value && typeof value === "object") {
deepFreeze(value);
}
}
return Object.freeze(obj);
}
deepFreeze(theObject);
theObject.y.a = 100;
console.log(theObject.y.a );
결실Vue 에서 Object.freeze 를 사용 합 니 다.
vue 2.0 에서 일반적인 JavaScript 대상 을 Vue 인 스 턴 스 에 전달 할 때 data 이 옵션 을 사용 하면 Vue 가 이 대상 의 모든 속성 을 옮 겨 다 니 며 사용 합 니 다. Object.defineProperty 이 속성 들 을 모두 getter/setter 로 바 꿉 니 다.이 getter/setter 들 은 사용자 에 게 보이 지 않 지만 내부 에 서 는 Vue 추적 을 의존 시 키 고 속성 이 접근 되 고 수정 되 었 을 때 변 화 를 알 립 니 다.
때때로 실제 응용 에서 우 리 는 특정한 대상 이나 배열 을 저장 하 는 데 만 사용 되 고 해당 하 는 보기 에 응답 하 라 고 요구 하지 않 습 니 다.그러나 이 과정 에서 vue 는 object.defineProperty 로 이 배열 을 감청 합 니 다.이것 은 성능 낭비 입 니 다.그래서 우 리 는 Object.freeze 를 사용 하여 데 이 터 를 동결 합 니 다.
<h4 v-for="(item,idx) in items" :key="idx">{{ item.text }}</h4>
data() {
let data = Object.freeze([{text:' '},{text:'ipbic'}])
return {
msg: '',
items:data
}
},
mounted() {
this.items[0].text = ' '; //
this.items = [{ text: 'itnavs' },{ text: ' ' }]; //
this.items = Object.freeze([{ text: 'itnavs' },{ text: ' ' }]); //
},
커 다란 배열 이나 Object 가 있 고 데이터 가 수정 되 지 않 을 것 이 라 고 확신 하면 Object.freeze()를 사용 하면 성능 을 크게 향상 시 킬 수 있 습 니 다.나의 실제 개발 에서 이런 향상 은 약 5~10 배 이 고 배 수 는 데이터 양 에 따라 점점 증가한다.Object.freeze 를 사용 하여 이러한 자원 의 낭 비 를 피 할 수 있 습 니 다.작 게 보지 말고 무시 하 세 요.반 걸음 을 내 딛 지 않 으 면 천리 에 이 르 지 못 합 니 다.
자 바스 크 립 트 에서 Object.freeze()를 어떻게 사용 하 는 지 에 대한 자세 한 설명 은 여기까지 입 니 다.자 바스 크 립 트 Object.freeze()에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Javascript에서 Math.max와 Math.max.apply의 차이점과 용법 상세 설명최근에 작은 사례를 만들 때 Math를 만났어요.max.apply라는 용법은 이전에 보기 드물게 재미있게 느껴졌으니 기록해 보세요. 1Math.max 문법:Math.max(n1,n2,n3,...,nX)반환값:max(...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.