DOM에 대한 몇 가지 설명


25

나는 DOM을 이해하려고 노력하고 있으며, 그것이 무엇인지에 대한 공정한 아이디어를 가지고 있지만, 고정시킬 수없는 특정 아이디어가 있습니다. DOM이 무엇이라고 생각하는지 나열하고 내 질문은 인라인이 될 것입니다.

  1. DOM은 완전히 객체 지향 웹 페이지 표현입니다. W3C DOM 표준은 대부분의 최신 브라우저에서 구현 된 DOM의 기초를 형성합니다.

    DOM은 XML / HTML 문서가 어떻게 객체 모델로 표현되는지에 대해 이야기합니까?

  2. DOM은 문서를 트리 또는 그로 브로 구현해야한다고 지정하지 않으며 객체 간의 관계 구현 방법을 지정하지도 않습니다.

    다른 방법으로 문서를 표현할 수 있습니까?

  3. 이런 식으로 할 때-

    document.write('welcome to my home page!');

    문서 객체는 DOM에 의해 제공됩니다. 쓰기 메소드는 DOM에 의해 JavaScript에 노출되는 인터페이스입니다.

    그래서 객체와 그 메소드는 DOM 파서에 의해 JavaScript 객체로 생성 된 다음 JavaScript 엔진에 표시됩니까? 아니면 DOM 파싱 엔진 내의 객체와 메소드가 자국어로되어 있습니까? 그리고 JavaScript 엔진에 노출되어 있습니까? 그렇다면 JavaScript에서 모국어로 번역하는 것은 무엇입니까?

  4. 언어 바인딩이란 무엇입니까?

    언어 바인딩은 DOM 사양에서 각 인터페이스를 구현하는 해당 언어의 고유 객체 집합입니다.

    개발자는 DOM 사양의 IDL (Interface Definition Language)을 따라 DOM에서 언어에 대한 언어 바인딩을 만들 수 있습니다.

    따라서 DOM 파싱 엔진이 C ++로 구현되면 IDL을 따라 언어 바인딩을 만들 때 특정 언어, 즉 DOM 파싱 엔진이 구축 된 C ++로 객체를 만드는 것입니까?


@apsillers DOM은 XML / HTML 문서 어떻게 객체 모델로 표현 되는지에 대해 이야기하고 있습니까? 게시물을 수정했습니다.
user1720897 2016 년

나는 의견에 내가 할 수있는 것에 대답 할 것이다. 3 & 4는 브라우저를 개발하는 사람이 실제로 대답하기를 원할 수 있으며 답변 수에 영향을 미치고 싶지 않습니다. 1-브라우저는 문서의 현재 상태를 이해하고, 이것을 DOM이라고 할 수 있으며, 또는 DOM을 문서의 상태를 쿼리하고 수정할 수있는 노출 된 표준 인터페이스로 호출 할 수 있습니다.
George Mauer

2-진술은 표현이 아니라 구현에 관한 것입니다. 내가 착각하지 않는 한,``표현 ''은 나무 여야합니다. 비하인드 씬 구현은 그렇지 않습니다.
George Mauer

답변:


19

다음은 관련 사양 및 참조를 가장 잘 읽은 것입니다. ( DOM 레벨 및 관련 링크 에 대한 Mozilla의 초록이 특히 유용 하다는 것을 알았습니다 .) 다른 사람의 수정 또는 설명을 권장합니다.

DOM은 XML / HTML 문서가 어떻게 객체 모델로 표현되는지에 대해 이야기합니까?

예. DOM 레벨 1 스펙에는 코어HTML의 두 부분이 있습니다 . 코어 DOM 명세는 설명 일반적으로 구조화 된 문서를 나타내는 데 사용할 수있는 DOM한다. HTML DOM 사양에 대해 설명 특히 HTML 문서를 설명하는 핵심 DOM을 사용하는 방법 과 HTML 고유의 인터페이스가 포함되어 있습니다.

DOM은 문서를 트리 또는 그로 브로 구현해야한다고 지정하지 않으며 객체 간의 관계 구현 방법을 지정하지도 않습니다. 다른 방법으로 문서를 표현할 수 있습니까?

DOM Core 문서가 트리라고 가정합니다. Node인터페이스 은 "전체 [DOM] 용 주 데이터. 그것은 단일 노드 나타내고있다 문서 트리 ." Node접근 자녀, 형제 자매, 부모 노드 (예를 들어, 여러 가지 특성을 가지고 parentNode, frstChild트리 구조를 의미한다 등). 플랫 트리 또는 선형 트리 (예 : 링크 된 목록)를 사용할 수 있지만 여전히 트리 형태 일 것입니다.

George Mauer가 의견에서 지적했듯이 특정 구현 의 기본 모델 이 트리 일 필요는 없음을 의미합니다. 그것은 사실이다. 구현이 DOM 사양에서 약속 한 기능을 제공하는 한 해당 기능을 제공하기 위해 원하는 구조를 사용할 수 있습니다.

DOM 파싱 엔진 내의 객체와 메소드가 자국어로되어 있습니까?

일반적으로 그렇습니다 . 대부분의 브라우저에서 DOM은 C와 같은 하위 언어로 구현되며 브라우저는 실제 표현을 조작 할 수있는 JavaScript 환경에 바인딩을 제공합니다. 사실, “DOM을 Javascript로 옮기기”의 의미 라는 질문을 보면 ? , Google은 네이티브 JavaScript DOM 구현으로 전환하는 데 관심이 있음을 알 수 있습니다 (C ++ 함수 해당 C ++ 함수에 대한 중복 JavaScript 래퍼 가 필요하지 않고 성능 향상을 위해).

JavaScript에서 모국어로 번역하는 책임은 무엇입니까?

나는이 주제에 대해 조금 더 위험하지만 JavaScript DOM 바인딩이 호출되면 JavaScript 실행 환경 (자체적으로 C와 같은 저수준 언어로 구현 됨)이 관련 DOM 함수를 호출한다는 것을 이해합니다. DOM을 조작하기 위해 (C / C ++로 작성)

그것보다 더 깊이 가고 싶다면 실제로 브라우저를 만드는 사람과 대화해야합니다.

그것은 IDL을 따라 언어 바인딩을 만들 때 DOM 구문 분석 엔진이 내장 된 C ++와 같은 특정 언어로 객체를 만드는 것입니까?

예. DOM의 IDL은 언어에 구애받지 않으므로 모든 언어로 구현할 수 있습니다. "DOM 구현 작성"은 DOM 스펙에 설명 된 IDL 인터페이스를 준수하기 위해 특정 언어로 코드를 작성하는 것을 의미합니다.


나는 구속력이 두 가지를 포함해야한다고 믿는다. 참조를 통해 기본 런타임을 호출하고 기본 구현에서 이벤트를 선택하는 방법. 일반적으로 콘솔에서 콘솔 로깅을 통해 브라우저에서 기본 코드 래퍼 인 메소드를 확인할 수 있습니다. 예를 들어, console.log(document.write);또는 console.log(document.constructor);- 추가 .toString()하면 함수 텍스트를 제공하지 않는 브라우저에서 로그 PARAM을. 객체는 반드시 네이티브 코드에서 미러링 된 동등 물을 가질 필요는 없습니다. 또한 대부분의 DOM 객체 속성은 실제로 관련 동작이있는 게터입니다.
Erik Reppen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.