속성 설명자는 ES5의 새로운 개념입니다. 해당 기능은 객체의 속성에 더 많은 제어를 추가하는 것입니다.
Object.defineProperty
속성 설명자를 연구하려면 먼저 Object.defineProperty 메서드에 대해 이야기해야 합니다. 이 메서드의 목적은 개체의 새 속성을 정의하거나 기존 속성을 수정하는 것입니다. 프로토타입은 다음과 같습니다.
Object.defineProperty(obj, prop, descriptor)
사용 예:
var obj = { };
Object.defineProperty(obj, 'attr', { value: 1 });
위의 코드 조각은 값이 1인 attr이라는 속성을 obj 객체에 추가합니다. 다음과 동일:
var obj = { };
obj.attr = 1;
이에 비해 Object.defineProperty의 작성 방법은 좀 더 복잡한 것 같습니다. 그러나 가장 큰 비밀은 세 번째 매개변수에 있습니다.
데이터 설명자
attr을 읽기 전용 속성으로 만들고 싶다면 쓰기 가능한 데이터 설명자를 추가할 수 있습니다.
var obj = { };
Object.defineProperty(obj, 'attr', {
값: 1,
쓰기 가능: 거짓
});
console.log(obj.attr);
obj.attr = 2; // 실패
console.log(obj.attr);
위 프로그램을 실행해 보면 두 번 출력된 attr의 값이 1이라는 것을 알 수 있는데, 이는 속성 쓰기에 실패했음을 의미한다. 그러나 할당문이 예외 없이 실행되지 않았기 때문에 이러한 결과는 다소 혼란스러울 수 있습니다. 큰 코드 조각에서 이러한 문제가 발생하면 문제 해결이 어려울 것이라고 상상해 보십시오. 실제로 엄격 모드에서 코드를 실행하면 예외가 발생합니다.
'use strict'; // 엄격 모드로 전환
var obj = { };
Object.defineProperty(obj, 'attr', {
값: 1,
쓰기 가능: 거짓
});
obj.attr = 2; // 예외 발생
속성이 열거될 수 있는지 여부를 제어할 수 있는 열거 가능한 또 다른 데이터 설명자를 살펴보겠습니다. 단순히 속성을 정의하는 경우 이 속성은 for...in 루프에서 열거될 수 있습니다.
var obj = { };
obj.attr = 1;
for (var i in obj) { console.log(obj[i]) }
열거형은 이를 "숨길" 수 있습니다:
var obj = { };
Object.defineProperty(obj, 'attr', {
값: 1,
열거 가능: false
});
for (var i in obj) { console.log(obj[i]) }
위의 코드를 실행하면 현재 attr 속성을 열거할 수 없기 때문에 콘솔에 아무 것도 출력되지 않는 것을 알 수 있습니다.
이 시점에서 궁금한 점이 있을 수 있습니다. 속성 설명자를 수정할 수 있나요? 예를 들어 읽기 전용 속성을 다시 쓰기 가능으로 정의할 수 있나요? 실제로 이는 속성 설명자를 변경할 수 있는지 여부를 제어하는 구성 가능한 다른 데이터 설명자에 따라 달라집니다.
var obj = { };
Object.defineProperty(obj, 'attr', {
값: 1,
쓰기 가능: false,
구성 가능: true
});
Object.defineProperty(obj, 'attr', {
쓰기 가능: true
});
obj.attr = 2;
위의 코드는 먼저 attr을 읽기 전용 속성으로 정의한 다음 이를 쓰기 가능으로 재정의합니다. 따라서 attr에 대한 쓰기는 성공적입니다.
액세스 설명자
액세스 설명자는 객체 지향의 get/set 접근자와 유사합니다.
var obj = { };
Object.defineProperty(obj, 'attr', {
설정: function(val) { this._attr = Math.max(0, val) },
가져오기: function() { return this._attr }
});
obj.attr = -1;
console.log(obj.attr) // 0
위의 코드에서 attr에 대한 액세스는 실제로 _attr에 대한 액세스가 되며, set 함수에서 최소값은 0으로 제한됩니다.
속성 설명자 가져오기
위 내용은 속성 설명자 설정에 관한 내용인데, 설정 설명자를 어떻게 구하나요? Object.getOwnPropertyDescriptor가 작업을 수행합니다.
var obj = { };
Object.defineProperty(obj, 'attr', {
값: 1,
쓰기 가능: false,
구성 가능: true
});
var desc = Object.getOwnPropertyDescriptor(obj, 'attr');
console.dir(desc);
객체 제어
앞서 언급한 Object.defineProperty는 객체의 속성에 대해 작동하는 반면, 아래에 언급된 세 가지 메서드는 객체에 직접 작동합니다.
Object.preventExtensions는 객체가 새로운 속성을 갖는 것을 방지할 수 있습니다.
var obj = { };
obj.attr = 1;
Object.preventExtensions(obj);
obj.attr2 = 2; //실패
Object.seal은 객체에 수정 가능한 속성 값만 갖도록 만들 수 있습니다(속성이 읽기 전용인 경우 속성 값도 수정할 수 없습니다):
var obj = { };
obj.attr = 1;
Object.seal(obj);
obj.attr = 1.5;
obj.attr 삭제 // 실패
Object.freeze는 객체를 완전히 수정할 수 없도록 만들 수 있습니다.
var obj = { };
obj.attr = 1;
Object.freeze(obj);
obj.attr = 1.5; // 실패
obj.attr2 = 2; //실패
그렇다면 객체가 방지 확장, 봉인 또는 동결되었는지 어떻게 알 수 있습니까? 대답은 Object.isExtensible, Object.isSealed 및 Object.isFrozen을 각각 호출하는 것입니다. 이 세 가지 함수의 사용법은 상대적으로 간단하고 더 이상 번거롭지 않습니다.
일반적으로 객체는 속성 설명자를 통해 더욱 엄격하게 제어할 수 있으며, 프로그램 로직의 엄격함을 강화할 수 있습니다. 유일한 단점은 ES5가 기본적으로 IE9에서만 구현된다는 것입니다(IE9는 아직 국내에서는 strict 모드를 지원하지 않습니다). IE8 점유율은 여전히 상대적으로 높지만, 이 세트는 현재 모바일 브라우저와 Node.js에서만 사용할 수 있습니다.

JavaScript 문자열 교체 방법 및 FAQ에 대한 자세한 설명 이 기사는 JavaScript에서 문자열 문자를 대체하는 두 가지 방법 인 내부 JavaScript 코드와 웹 페이지의 내부 HTML을 탐색합니다. JavaScript 코드 내부의 문자열을 교체하십시오 가장 직접적인 방법은 대체 () 메소드를 사용하는 것입니다. str = str.replace ( "find", "replace"); 이 메소드는 첫 번째 일치 만 대체합니다. 모든 경기를 교체하려면 정규 표현식을 사용하고 전역 플래그 g를 추가하십시오. str = str.replace (/fi

이 튜토리얼은 사용자 정의 Google 검색 API를 블로그 또는 웹 사이트에 통합하는 방법을 보여 주며 표준 WordPress 테마 검색 기능보다보다 세련된 검색 경험을 제공합니다. 놀랍게도 쉽습니다! 검색을 Y로 제한 할 수 있습니다

그래서 여기 당신은 Ajax라는이 일에 대해 배울 준비가되어 있습니다. 그러나 정확히 무엇입니까? Ajax라는 용어는 역동적이고 대화식 웹 컨텐츠를 만드는 데 사용되는 느슨한 기술 그룹을 나타냅니다. 원래 Jesse J에 의해 만들어진 Ajax라는 용어

이 기사 시리즈는 2017 년 중반에 최신 정보와 새로운 예제로 다시 작성되었습니다. 이 JSON 예에서는 JSON 형식을 사용하여 파일에 간단한 값을 저장하는 방법을 살펴 봅니다. 키 값 쌍 표기법을 사용하여 모든 종류를 저장할 수 있습니다.

코드 프레젠테이션 향상 : 개발자를위한 10 개의 구문 하이 라이터 웹 사이트 나 블로그에서 코드 스 니펫을 공유하는 것은 개발자에게 일반적인 관행입니다. 올바른 구문 형광펜을 선택하면 가독성과 시각적 매력을 크게 향상시킬 수 있습니다. 티

손쉬운 웹 페이지 레이아웃에 대한 jQuery 활용 : 8 에센셜 플러그인 jQuery는 웹 페이지 레이아웃을 크게 단순화합니다. 이 기사는 프로세스를 간소화하는 8 개의 강력한 JQuery 플러그인을 강조합니다. 특히 수동 웹 사이트 생성에 유용합니다.

이 기사는 JavaScript 및 JQuery Model-View-Controller (MVC) 프레임 워크에 대한 10 개가 넘는 튜토리얼을 선별 한 것으로 새해에 웹 개발 기술을 향상시키는 데 적합합니다. 이 튜토리얼은 Foundatio의 다양한 주제를 다룹니다

핵심 포인트 JavaScript에서는 일반적으로 메소드를 "소유"하는 객체를 말하지만 함수가 호출되는 방식에 따라 다릅니다. 현재 객체가 없으면 글로벌 객체를 나타냅니다. 웹 브라우저에서는 창으로 표시됩니다. 함수를 호출 할 때 이것은 전역 객체를 유지하지만 객체 생성자 또는 그 메소드를 호출 할 때는 객체의 인스턴스를 나타냅니다. call (), apply () 및 bind ()와 같은 메소드를 사용 하여이 컨텍스트를 변경할 수 있습니다. 이 방법은 주어진이 값과 매개 변수를 사용하여 함수를 호출합니다. JavaScript는 훌륭한 프로그래밍 언어입니다. 몇 년 전,이 문장은있었습니다


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
