Saya telah mencoba memahami DOM, dan meskipun saya memiliki gagasan yang adil tentang apa itu, ada beberapa ide yang tidak dapat saya uraikan. Saya akan mencantumkan apa yang saya pikirkan tentang DOM dan pertanyaan saya akan sesuai.
DOM adalah representasi sepenuhnya berorientasi objek dari halaman web. Standar DOM W3C membentuk dasar DOM yang diterapkan di sebagian besar browser modern.
Jadi apakah DOM berbicara tentang bagaimana dokumen XML / HTML direpresentasikan sebagai model objek?
DOM tidak menentukan bahwa dokumen harus diimplementasikan sebagai pohon atau hutan, juga tidak menentukan bagaimana hubungan antara objek diimplementasikan.
Dengan cara apa lagi dokumen itu dapat diwakili?
Ketika Anda melakukan sesuatu seperti ini -
document.write('welcome to my home page!');
objek dokumen disediakan oleh DOM. Metode menulis adalah antarmuka yang terkena JavaScript oleh DOM.
Jadi objek dan metodenya dibuat sebagai objek JavaScript oleh parser DOM dan kemudian disajikan ke mesin JavaScript? Atau apakah objek dan metode dalam mesin parsing DOM dalam bahasa asli mereka sendiri? Dan apakah terkena mesin JavaScript? Jika demikian, lalu apa yang bertanggung jawab untuk menerjemahkan dari JavaScript ke bahasa asli?
Apa itu ikatan bahasa?
Penjilidan bahasa adalah himpunan objek asli ke bahasa yang bersangkutan yang mengimplementasikan masing-masing antarmuka dalam spesifikasi DOM.
Pengembang dapat membuat binding bahasa dari DOM ke bahasa mereka hanya dengan mengikuti IDL (Interface Definition Language) dalam spesifikasi DOM.
Jadi jika mesin parsing DOM diimplementasikan dalam katakanlah C ++, apakah itu berarti bahwa ketika Anda membuat binding bahasa dengan mengikuti IDL, Anda hanya membuat objek dalam bahasa tertentu, yaitu C ++ yang dibuat dengan mesin parsing DOM Anda?
sumber
Jawaban:
Berikut ini adalah bacaan terbaik saya dari spesifikasi dan referensi yang relevan. (Saya menemukan abstrak Mozilla tentang tingkat DOM dan tautan terkait sangat membantu.) Saya mendorong koreksi atau klarifikasi dari orang lain.
Iya nih. Ada dua bagian spesifikasi DOM Level 1 - Core dan HTML . Spesifikasi Core DOM menggambarkan DOM umum yang dapat digunakan untuk mewakili dokumen terstruktur. The HTML DOM spesifikasi menjelaskan bagaimana menggunakan Core DOM untuk menggambarkan dokumen HTML khusus dan termasuk antarmuka HTML-spesifik.
DOM Inti tidak menganggap bahwa dokumen tersebut adalah pohon. The
Node
antarmuka adalah "... datatype utama untuk seluruh [DOM]. Ini merupakan node tunggal di pohon dokumen ."Node
memiliki beberapa properti untuk mengakses anak-anak, saudara kandung, dan simpul orangtua (misparentNode
.frstChild
,, dll.) yang menyiratkan struktur pohon. Anda bisa menggunakan pohon datar atau pohon linier (misalnya, daftar tertaut), tetapi masih berupa pohon.Seperti yang ditunjukkan George Mauer dalam komentar, mungkin maksud Anda bahwa model yang mendasari implementasi tertentu tidak perlu berupa pohon. Itu benar; selama implementasi Anda menyediakan fungsionalitas yang dijanjikan dalam spesifikasi DOM, Anda dapat menggunakan struktur apa pun yang Anda suka untuk menyediakan fungsionalitas itu.
Secara umum, ya . Di sebagian besar browser, DOM diimplementasikan dalam bahasa tingkat rendah seperti C, dan browser memasok binding ke lingkungan JavaScript yang dapat memanipulasi representasi aktual. Bahkan, jika Anda melihat pertanyaan Arti dari "Memindahkan DOM ke Javascript"? , Anda akan melihat bahwa Google tertarik untuk beralih ke implementasi DOM JavaScript asli (kemungkinan untuk menghindari membutuhkan fungsi C ++ dan pembungkus JavaScript duplikat untuk fungsi C ++; mungkin juga untuk keuntungan kinerja).
Saya agak sedikit kabur tentang hal ini, tetapi pemahaman saya adalah bahwa ketika JavaScript DOM mengikat dipanggil, lingkungan eksekusi JavaScript (yang dengan sendirinya diimplementasikan dalam bahasa tingkat rendah seperti C) melakukan panggilan ke fungsi DOM yang relevan (ditulis dalam C / C ++) untuk memanipulasi DOM.
Jika Anda ingin lebih dalam dari itu, Anda harus berbicara dengan seseorang yang benar-benar membuat peramban.
Iya nih. IDL DOM adalah agnostik bahasa, sehingga Anda dapat mengimplementasikannya dalam bahasa apa pun. "Menulis implementasi DOM" berarti menulis kode (dalam bahasa tertentu) agar sesuai dengan antarmuka IDL yang dijelaskan dalam spesifikasi DOM.
sumber
console.log(document.write);
atauconsole.log(document.constructor);
- tambahkan.toString()
param log di browser yang tidak memberi Anda teks fungsi. Objek tidak harus memiliki setara cermin dalam kode asli. Juga, sebagian besar properti objek DOM sebenarnya getter dengan perilaku terkait.