2013-04-29 1 views
0

나는 여기에 설명 된 등록 정보 속성의 사용법에 대해 자세히 알고 싶어 : 나는 이러한 특성의 쓰임새를 상상할 수 http://www.ecma-international.org/ecma-262/5.1/#sec-8.6.1ECMAScript-5의 속성 특성 "기능"의 장점은 무엇입니까?

,하지만 그들은 매우 드물다. 또한 쓰기 가능하고 열거 가능하며 구성 가능한 속성은 기본적으로 false로 설정되지만 대부분이 값을 으로 설정하고 싶기 때문에 설정해야합니다. 왜 그들은 기본적으로 거짓인가?

개체를 만들고 속성을 설정하는 것은 매우 기본적인 작업이었습니다. 이제 속성 설명자가 있습니다.이 속성 설명자는 인위적이거나 부자연 스럽거나 복잡하거나 불편한 것처럼 설명 할 수 있습니다. 어쩌면 나는 아주 중요한 것을 놓친 것일 수도있다.

내 질문은 : 속성 속성의 주된 목적은 무엇입니까? 어떻게 사용할 수 있습니까?

속성 설명자를 사용하지 않아도됩니까? 예를 들어 나를위한 속성을 설정할 좋은 패턴이 있습니까? 예를 들어 Object.create를 두 번째 매개 변수 "Properties"와 함께 사용하면 속성 설명자를 사용해야합니다. 그래서 이것을 사용하지 않아야합니까?

+0

"* I는 재산 설명을 피할 수 *"- 물론, 거기에 아무것도 그 당신이 그들을 사용하도록 강요합니다. 그냥 옛날 학교 재산 배정을해라. – Bergi

+0

나는 왜 그들이 디폴트 값'false'를 만들었는지 모르지만, 이미'true'의 디폴트 값으로 속성을 만드는 방법이 있기 때문에 추측 할 수 있습니다. 당신의 실제 관심사는 무엇입니까? 일부 사용자 정의 동작 WRT 기본값을 원한다면 원하는대로 기본값을 설정하는 함수를 작성하십시오. –

답변

2

"... 대부분이 값을 갖고 싶습니다. 그래서 설정해야합니다."

당신이 그들을 필요로하는 경우에만. 그렇지 않으면 일반적인 객체 리터럴 구문이나 새 속성에 대한 대입 연산자를 사용하면됩니다.

"왜 기본적으로 false입니까?"

내가 사용할 수있는 구문이 기본적으로 그들이 true에 이미 있기 때문에 그것의 상상에 맡기겠습니다.

"개체를 만들고 속성을 설정하면 매우 기본적인 것입니다. 이제 속성 설명자가 있습니다 ...는 "

아무것도 변경되었습니다. 그것은 예전대로 그냥 같은 기본입니다. 당신이 그들을 필요로하는 경우 귀하의 처분에 단순히 더 많은 도구가 있습니다.

"... 내가 같이 설명 할 수있는 인공 자연스러운, 복잡하거나 불편. "

구문은 아마도 조금 복잡하지만, 당신이 그것을 좋아하지 않는 경우에, 그것을 사용하지 마십시오. 다른 뭔가 속성 설명을 설정해야하는 경우보다이라면 구문에 관계없이 새로운 기능을 갖게되어 기쁩니다.

또한, 6

ECMAScript를 리터럴 구문을 객체에 추가 될 가능성이 속성 기술자의 정의에있다. "그래서 내 질문은 : 재산의 주요 목적은 무엇을 어떻게 우리가 그들을 사용할 수있는 속성"

그 자체로 설명해야합니다. 그들은 수동으로 configurable, writeableenumerable 개체의 속성 설정을 구성하기위한 것입니다. 이러한 설정 중 하나가 필요한 상황이 발생하면 사용하게됩니다.

"속성 설명자 사용을 피할 수 있습니까?"

물론. 다시 한 번 바뀌지 않았습니다. 당신이 그들을 필요로한다면 그들은 거기에 있습니다. 그렇지 않으면 무시하십시오.

"예를 들어 나를 위해 속성을 설정하는 좋은 패턴이 있습니까?" 당신이 다른 기본값이처럼 도우미 기능을 사용하려면

없음 당신이 무슨 뜻인지, 그러나 확인하십시오

function addWriteable(obj, prop, value) { 
    return Object.defineProperty(obj, prop, { 
     writeable: true 
    }); 
} 
1

쓰기의 기본은 속성의 값이 명시 적 속성의 명명 된 속성

이 스펙으로 규정되어 있지 않은 경우는 손으로 정의 false

경우가있을 것입니다 예 : true. 당신이 ecmascript 자체와 자바 스크립트/jscript 방언 사이에 큰 차이가 있다는 것을 알아야한다는 것.

어느 쪽이든 일반적으로 프레임 워크 또는 그 선을 따라 무엇인가를 만드는 것을 고려하는 경우를 제외하고는 이러한 속성 속성을 사용해서는 안됩니다. 예를 들어, prototype.js를 사용하여 Enumerablefalse으로 설정하고 Get을 재정의하여 개발자가 사용하기 쉬운 이국적인 구문을 허용하도록 다시 정의했지만 (다른 기본 구문과 비슷 함) 당신이 그것을 필요로하지 않는 정상적인 것들.

+0

두 개의 매개 변수를 사용하여 Object.create를 호출하면 defineProperties가 호출되어 속성 설명자를 사용하게됩니다. 그래서 당신의 대답은이 함수에서 "속성"매개 변수 선언을 사용하지 말아야한다는 것을 의미합니까? 그렇지 않으면 나는 내가 설정하고있는 것을 이해해야한다고 생각하기 때문이다. –

+0

실제로 필요하지 않은 경우 아무 것도 설정하지 마십시오. –

관련 문제