2011-01-10 2 views
3

저는 궁금합니다. 왜 ECMAScript5 사양이 엄격 모드에서 미리 정의 된 객체 프로토 타입의 속성을 더 강화하지 않았는지 알고 있습니다. 예를 들어, hasOwnProperty가 정의되는 방식에 관한 정보가없는 것처럼 보입니다. FF4 베타 버전에서 코드를 다시 정의 해 보았습니다.이 문제를 해결할 수있었습니다. 내가 잘못 아무것도하지 않은 경우, 다음이 사람이 여전히 ...이에hasOwnProperty 및 ECMAScript 5 엄격 모드

생각을 Object.prototype.hasOwnProperty 속성을 재정의하고 정말 작업 속성에 대한 그것에 의존하는 모든 코드를 나사 수 있다는 것을 의미?

편집 : 나는 사양을 통해 발굴로 좀 더 정보 ... 나는 아래 코멘트에 넣어했듯이

, 당신은 정말 인해 메타 데이터에 엄격 모드에 Object.prototype에를 변경할 수없는 경우 (Writable, Enumerable 및 Configurable 모두 false로 설정 됨) 및 FF 4 베타 (테스트를 실행하는 데 사용함)에서 예외가 생성됩니다.

감사합니다.

+0

질문 : 기본적으로 기본 제공 개체가 봉인되어 있습니까? 나는 아직 ES5를 파헤 치지 않았으므로 그 질문에 대한 답을 모른다. –

+0

@ ime Vidas 아니요, 기본 제공 개체는 기본적으로 봉인되어 있지 않습니다. 그들의 [Extensible]]은 'true'로 설정되어 있으므로 쉽게 속성을 추가 할 수 있습니다 (15 절 참조). AIUI의 목적은 ES 객체 모델을 유연하게 유지하면서 절대적으로 중요한 부분을 잠그는 것입니다 (예 : 전역 '정의되지 않음', NaN 및 Infinity 속성은 쓰기 및 구성 불가능) :) – kangax

답변

3

그리고? Object.prototype에있는 모든 것을 죽일 수 있습니다. 프로젝트/사이트에 이러한 코드를 포함시키지 말고, 더 나은 것을하지 말고, 그런 일을하는 바보를 찾아 공으로 걷어차주십시오.

내말은 True = False을 수행하여 주어진 Python (2.x) 프로그램을 망칠 수도 있습니다.

멍청이들로부터 절대로 보호 할 수는 없습니다. 못. 그들을 교육 시키거나 피하십시오. (다른 코드로 사용하는 경우 당신이해야으로) 익명 래퍼로 스크립트를 캡슐화 경우

편집은 "use strict"는 코드 로컬 것, 이것의 불가능 성을 명확히합니다.

즉, 악의 바보 코드가 엄격 모드를 자체적으로 사용하지 않는다면, 그들은 내가 말한 것이 아닌 총 바보가 아니라면 ... ES3에서 실행됩니다. 너의 아름다운 엄격함조차도 존재하지 않는다.

+1

" 바보, 그들은 당신을 그들의 수준으로 끌어 당기고 경험으로 당신을 때린다 " – qwertymk

+0

음, 정말로. 사양을 보면 Object.prototype에 다음과 같은 특성이 있음을 알 수 있습니다. Writable : false, enumerable : false 및 configurable : false. 나는 또한 그것을 변화 시키려고 노력했다. 그리고 나는 FF가 예외를 생성한다는 것을 알아 차렸다. –

+0

@ 루이스 (Luchis) 잘못된 문구를 사용했는데 단순히 모든 속성을 삭제할 수 있습니다. 단지'Object'의 'prototype' 속성 만 덮어 쓸 수 없습니다. –