ECMAScript 5 개체 및 속성 (1)
8908 단어 properties
일부 새로운 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 와 같 습 니 다) 입 니 다.
그리고 속성 은...
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 를 유지 할 수 있 도록 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Spring] properties 파일에 정의된 값 가져오기실시간 강의 수업 중 Admin key에 관련된 이야기가 나와 1,2차 Python, Flask 프로젝트에서 DB등 보완이 필요한 값들에 대해서 다른 곳에 따로 저장하고 변수에는 Path 설정해주고 github에 올...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.