2016-03-31 28 views
0

E.g.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement
https://developer.mozilla.org/en-US/docs/Web/API/WindowJavaScript接口

難道這些和其他類似的簡單的構造函數的情況下,即使Mozilla的提到他們作爲接口?

如果不是接口和構造函數的實例有什麼區別?

+3

「接口」的HTMLAnchorElement對象是不實際的東西內的存在JavaScript語言。它僅供規範用來描述某些對象預期具有的一組屬性和方法。在許多情況下(Window和HTMLElement)都有與接口完全對應的類/構造函數,但在其他情況下卻沒有。在任何情況下,接口都不是*實例或類本身,它只是對它的描述。除非實際閱讀規範,否則通常可以忽略接口本身。 –

+0

'var a = {n:1}; var b = {n:2}'。它們都沒有使用構造函數創建,但它們共享相同的接口。這基本上就是接口的含義。這只是對該對象可用內容的描述/保證。實際上,如果您查看C#中的接口,則無法創建接口的實例。它只保證實現該接口的任何類將擁有該接口所描述的所有成員。 –

+0

@ MikeC - 使用字面語法**創建的對象由Object構造函數創建,請參見[* EMCA-262§12.2.6.8*](http://www.ecma-international.org/ecma-262/6.0 /#仲對象初始化運行時語義評價)。 – RobG

回答

4

萬維網聯盟(W3C)是一個標準的制定機構,對於那些在網絡上使用廣泛的語言和技術的標準。他們不製作瀏覽器,但他們確實設定了瀏覽器需要遵循的標準。

所以,他們寫一個規範的對象,這個規範包括開發商需要如何「接口」與對象以及對象應該給開發商與接口的交互反應的所有細節。

但是,由於長期在大多數OOP環境意味着,一個接口必須是「執行」,這是軟件供應商誰使瀏覽器軟件的工作。他們沒有完全知道如何編寫代碼,但規範確實告訴他們代碼應該做什麼以及用戶如何與代碼交互。

一個簡單的例子可能是,在美國,我們有法律規定汽車應該有安全氣囊,並且這些安全氣囊應該以特定方式運行,但政府實際上並沒有製造安全氣囊和安全氣囊製造商可以按照他們所希望的任何方式構建一個,只要它符合所列出的規範。

最終,JavaScript沒有創建接口的機制,只有對象。但是,瀏覽器軟件供應商通過內置對象實現W3C(和其他)指定的許多不同接口,例如document

當我打電話給document.getElementsByTagName("p")時,我不確切知道Chrome用於將所有段落元素收集到類似數組的對象中的底層代碼,我也不關心(通常)。我所關心的是有一個衆所周知的標準化對象document,它具有所有現代瀏覽器都實現的標準化應用程序編程接口(API)。

2

它們是DOM接口,與JavaScript幾乎沒有關係,除了JavaScript是用於與它們接口的最常用語言之外。

w3.org

文檔對象模型,儘管它的名字一對夫婦的相關報價。 。 。 ,是一種獨立於語言的方式來指定接口和對象; 。 。 。它也可以使用特定於語言的綁定來實現,如本文檔中指定的Java或ECMAScript綁定。

和:

的DOM指定可用於管理XML或HTML文檔接口。認識到這些接口是抽象的非常重要 - 就像C++中的「抽象基類」一樣,它們是指定訪問和操作應用程序內部文檔表示形式的方法。特別是,接口並不意味着具體的具體實現。只要支持本規範中顯示的接口,每個DOM應用程序就可以自由地維護任何方便表示的文檔。

JavaScript沒有的接口一個概念,但它仍然可以實現DOM接口,比如它實現了HTMLAnchorElement DOM Interface