(JAVASCRIPT)請問有關於DOM相容的問題?

請問dom是包含在window物件哩,還是dom裡有window物件(以及其他的物件)。因為很多地方都說的不太一樣,還請給我一個正確無誤的答案!

已更新項目:

謝謝"忘記人"的回答,不過我還需要參考其他人的看法,再麻煩了~

2 個已更新項目:

感謝你們這麼詳細的回答,真的受益良多~

2 個解答

評分
  • 1 0 年前
    最佳解答

    就我知道的說一說,討論討論切磋切磋,要保證正確無誤....嗯,有點給它太沉重。

    說明

    DOM : Document Object Model 文件物件模型

    就網頁上 javascript 使用 DOM 而言,它可以讓設計人員除了一般的瀏覽器物件(例如 window, document)以外,

    還能將每個HTML標籤也視為物件來管理,是網頁與 javascript 語言溝通的橋樑。

    DOM 是全球資訊網協會(World Wide Web Consortium,W3C)建立的標準,稱之為「W3C DOM」。

    是給 HTML 與 XML 文件使用的一組 API。但是 DOM 本身是設計為一種獨立的程式語言,以一致的 API 存取文件的結構表述。

    DOM 其實可以與任何程式語言共同運作。(節錄自 http://forum.moztw.org/viewtopic.php?t=1978)

    window : 是瀏覽器物件模型裡的瀏覽器階層結構中,最上層的物件(詳見 動態網頁設計參考手冊 p.91頁 物件模型圖解)

    而瀏覽器物件模型只是[網頁裡的 Dynamic HTML 原始碼] 與 [建立視窗,並填入網頁元件的瀏覽器軟體]之間的介面

    當把瀏覽器物件模型看成是瀏覽器的一部分,而 Dynamic HTML 是一種共通的跨瀏覽器文件定義語言時,

    所有支援DHTML的瀏覽器,都必須在它們的瀏覽器物件模型裡,提供相同的核心物件,不然沒有辦法做出相容於各瀏覽器的網頁。

    結論

    DOM : Document Object Model 文件物件模型,是給 HTML 與 XML 文件使用的一組 API,以一致的 API 存取文件的結構表述。

    window : 是瀏覽器物件模型裡的瀏覽器階層結構中,最上層的物件,

    瀏覽器物件模型提供各種存在且運作於瀏覽器軟體的物件,方法,性質,事件,並允許網頁裡的HTML與Script程式碼操作它們。

    我想說的是 :

    DOM 所指的是一個文件物件模型,本身是設計為一種獨立的程式語言,以一致的 API 存取文件的結構表述。

    window 是瀏覽器物件模型裡的瀏覽器階層結構中,最上層的物件。

    而瀏覽器物件模型 [提供各種存在且運作於瀏覽器軟體的物件,方法,性質,事件],並允許網頁裡的HTML與Script程式碼操作它們。

    所以說問題 : dom 是包含在window物件哩,還是dom裡有window物件(以及其他的物件)?

    依現在各家瀏覽器實作 W3C DOM 的程度, 幾乎所有的瀏覽器物件都有實作 DOM API

    你能在網頁用 javascript 操作 window 物件, 但沒有一個叫做 dom 的物件給你操作吧!!

    2007-06-07 16:51:42 補充:

    ㄏㄏ, 都沒人回阿.............我在說一些些..

    剛剛看到你有一個發問在投票,一時手癢,想回又不能回,只好留在這裡...

    物件跟實體的關係?就我所接觸的幾乎都是以物件稱呼~

    物件:物件導向(Object-Oriented)可以說是一種思考方法,它把任何東西都視作一個物件。而且必具有3個特徵,必須要能 [封裝] [繼承] [多形],而構成物件的叫類別(Class)。

    實體:是物件經由「實體化」過程(Instantiation)所得到的副本,是使用 new 指令依照[類別]建立物件,然後傳回指向此物件的參考。

    2007-06-07 16:52:22 補充:

    如 Array 是一個類別,也是一個物件(廢話!! [物件導向(Object-Oriented)是一種思考方法,它把任何東西都視作一個物件。])

    var arr1 = new Array(2);

    var arr2 = new Array(12);

    這裡我們建立了2個 Array 類別的實體,分別是 arr1, arr2,是使用 new 指令依照 Array 類別建立物件,然後傳回指向此物件的參考。

    2007-06-07 16:52:50 補充:

    javascript裡有實體的存在嗎?

    你以為在寫 javascript 所用到的 window, document, location, history, screen, style,...是什麼呢??當然是實體!!

    但是我沒經由物件實體化的過程產生這些物件實體啊??

    ----- 當然, 因為瀏覽器在產生網頁的同時就已經預先產生了這些 [預設物件] 的實體放在環境(context)裡,供你使用了, 不然你知道如何產生一個 window or document or 其他預設物件的方式嗎?不知道對吧,因為不需要你知道!!

    2007-06-07 16:53:40 補充:

    就拿網頁來說, 那是瀏覽器給你的環境(context), 早期瀏覽器只對網頁中的視窗 表單 框架 ....提供 BOM(Browser Object Model)的物件,

    但 IE 4, Netscape 6 之後的版本, 所有以 <> 括住的標籤也都是物件(這些物件是DOM 不是 BOM)

    2007-06-07 16:54:01 補充:

    javascript 是 script 語言, 是寬鬆型態 (Loosely Typed), 是原型繼承(prototype-based inheritance),....跟現在的主流物件導向語言(如 C/C++ Java c#)很多不一樣,

    雖然有部分語法雷同,但彼此之間 [封裝] [繼承] [多形]方式有很多不同的用法跟習慣,學會主流物件導向語言的語法並不會對你學習 javascript 有太多幫助.

    2007-06-07 16:54:23 補充:

    最後舉個例子...

    比如在人類社會中,構成這個社會的是人。(物件導向(Object-Oriented)是一種思考方法,它把任何東西都視作一個物件)

    而每個人都是經由母親的懷孕分娩過程來到這個社會, 不會是石頭蹦出來的(實體:是物件使用 new 指令依照[類別]建立物件,經由「實體化」過程(Instantiation)所得到的副本[參考])

    2007-06-07 16:54:46 補充:

    人類社會可以把人分成多種:依國別,依職業,依身份,依年紀,依血緣...很多很多種分類(而構成物件的叫類別 Class)

    如網站設計師都會設計網站(這是 [網站設計師]類別裡的 abstract method [設計網站]), 但是文森特_柯里昂設計的特別棒(這是 [文森特_柯里昂] 這個網站設計師實體, 實作[設計網站]方法跟其他實體不同)

    2007-06-07 17:45:37 補充:

    簡而言之:物件導向(Object-Oriented)是一種思考方法,它把任何東西都視作一個物件, 把物件的特徵封裝起來叫類別, 使用 new 指令依[類別]建構子, 建立出來的是實體。實體具有所屬類別的特徵,實體不會是石頭裡蹦出來的, 必定經由「實體化」過程產生

    2007-06-07 17:48:28 補充:

    而構成物件的叫類別(Class)。<---------這話有語病, 不知該如何解釋

    2007-06-08 08:52:48 補充:

    如網站設計師都會設計網站(這是 [網站設計師]類別裡的 abstract method [設計網站]), 但是文森特_柯里昂設計的特別棒(這是 [文森特_柯里昂] 這個網站設計師實體, 實作[設計網站]方法跟其他實體不同)

    <------------------這段話也有語病, 越說越離譜了!!

    2007-06-08 09:04:21 補充:

    ㄏㄏ, 感謝淡藍色的說明, 你說的比我好太多了,言簡意駭,切乎重點,不像我說的零零落落,像個 [字障], 你說的這一篇, 絕對是最佳解答!!

    2007-06-09 09:47:22 補充:

    哈, 每每看完淡藍色的說明, 就好像在灰濛濛天空底下看到一到光, 謝謝你.

  • 1 0 年前

    忘記人,您寫得實在太棒了。淡藍色也在此寫寫自己所認知的 DOM。

    DOM 是 W3C 所訂出的一份規格。由於 Web 技術愈發延伸,為了讓瀏覽器文件上的操作接近應用程式(Application),以達成更多的瀏覽應用,所以需要一份規格以適用於可程式化的程式稿(Script)供瀏覽器軟體廠商有設計規劃上的依據,DOM 因此誕生。

    2007-06-08 03:31:47 補充:

    HTML 就原始碼(HTML File Content)的角度,每組標籤(Tag)稱為 HTML 元素(Element),例如 <BODY>...</BODY> 元素、<font>...</font> 元素...等等;HTML 文件在撰寫上是以巢狀方式建構這些元素,所以就物件(Object/Component)觀點,每組巢狀元素在瀏覽器內部形成一個文件節點(Object Node),例如 body object node, font object node...等等。

    2007-06-08 03:57:34 補充:

    淡藍色認為 Document Object Model 中的 Object 字眼並非 Object-Oriented 中的 Object。物件導向有四個特徵:抽象性、繼承、封裝、多型,是一種設計方法論,但是 Document Object Model 中的所有文件節點雖然具有抽象性,但是無法製作繼承物件、無法封裝新的自訂物件加入 DOM 中、各個文件節點的方法無法實做多型。這關鍵在於文件載入(Load)後,實體(Instance)已形成,各文件節點的物件類別(Class)並不公開,也未提供軟體延續程序。所以 DOM 中的 Object 應解釋為「元件」(Component)。

    2007-06-08 04:13:58 補充:

    瀏覽器若支援 Script 必定提供 DOM 虛擬機器,否則無法存取 HTML 原始碼上所描述文件節點上的 Attribute、Property、Method...,DHTML 也不會存在。所有的程式稿,例如 Javascript、JScript、VBScript... 都是在這個平台上以直譯(Interpret)方式執行。

    2007-06-08 04:25:21 補充:

    (我覺得 忘記人 所寫的非常有價值,所以在此答覆 文森特_柯里昂 的問題)

    DOM 是包含在 window 物件:應修正成 window 節點為瀏覽器整個 DOM 平台上的根節點、 window 節點本身與其子節點都符合 DOM 規格。

    DOM 裡有window物件(以及其他的物件):應修正成 W3C 所訂定的 DOM 規格裡描述了 window 物件(以及其他的物件)。

    2007-06-08 04:28:09 補充:

    忘記人 的解答最後的一段文字:

     「構成物件的叫類別(Class)」

    應修正為

     「描述物件的規範稱為類別(Class)」

    2007-06-09 00:27:10 補充:

    To 忘記人:

    「網站設計師」「應該」都會設計網站(因為是 abstract method 所以基礎類別沒有「設計網站」的實際作法),「文森特_柯里昂」為「網站設計師」(繼承自「網站設計師」類別,具備「網站設計師」的一切特性與能力),他所設計的特別棒(「文森特_柯里昂」實做了非常優質的「設計網站」方法)。某個作業平台使用了「文森特_柯里昂」所製作(產生)的網站(物件實體),大受網友們好評(物件實體在執行階段,其物件方法所展現的效能)。

還有問題?馬上發問,尋求解答。