설명 할 수없는 Javascript 코드에 이상한 상황이 있습니다. 지금까지는 Safari/Mac에서만 관찰되었습니다. 또한Javascript에 본질적으로 읽기 전용 개체가 있습니까?
Attempted to assign to readonly property.
:이 오류가 발생 때로는
dict[id].sliceHovered = true;
그리고 :
는이 같은 라인이
dict
베어 빈 객체입니다있는 Idict={}
으로 자신을 만드십시오.id
은 외부 데이터에 의해 제공되므로 아무 것도 될 수 있습니다 (어떤 특정 값이 원인인지 아직 모르겠습니다).sliceHovered
분명히 자바 스크립트에 을 구축하고 무언가의 이름이 아닙니다. DICT에- 객체 내 자신의 유형입니다. 그들은
sliceHovered
회원을 가지고 있지만, 자바 스크립트로 정의 된 속성이 아닙니다 (Object.defineProperty()
처럼). 단지 일반 속성입니다 (생성자는this.sliceHovered=false
을 실행합니다). "use strict"
입니다.Object.freeze()
,Object.seal()
,Object.preventExtensions()
및const
은 전체 코드베이스에서 사용되지 않습니다.
따라서 이러한 오류가 여기에 어떻게 던져 질 수 있는지는 매우 혼란 스럽습니다. 색인 생성 오류가 발생하여 이 undefined
또는 null
일 경우 오류가 달라집니다. 내 생각에 dict
은 dict={}
으로 생성되었으므로 Object
에서 상속받으며 id
은 상속 된 속성에 매핑됩니다. 그러나 sliceHovered
은 분명히 기존 Javascript 속성의 이름이 아니기 때문에 dict[id]
에서 반환 된 객체는 읽기 전용이어야합니다.
그러나 본질적으로 읽기 전용 인 자바 스크립트 개체는 생각할 수 없습니다.
어떤 아이디어가 잘못되었을 수 있습니까? 확인 디스크립터를 잘 값을 가질 수 있도록 Object.getOwnPropertyDescriptor(dict, id)
를 사용하려고 또한 var dict = Object.create(null);
:
'id = '__proto __''일 때 어떤 일이 발생합니까? 내가 옳다면 아무 것도 지정할 수 없으므로 읽기 전용 일뿐입니다. 그러나 크롬은이 경우 어떠한 오류도 발생시키지 않으며 최근 버전의 Safari에 액세스 할 수 없습니다. –