首頁  >  文章  >  web前端  >  javascript中宿主物件和原生物件的差別是什麼

javascript中宿主物件和原生物件的差別是什麼

青灯夜游
青灯夜游原創
2021-07-06 14:45:003839瀏覽

區別:原生對像是獨立於宿主環境的ECMAScript實作提供的對象,即ECMA-262定義的類別(引用型別);而宿主對像是由ECMAScript實現的宿主環境提供的對象,所有非原生對像都是宿主物件。

javascript中宿主物件和原生物件的差別是什麼

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

內建(Build-in)物件與原生(Naitve)物件的差別在於:前者總是在引擎初始化階段就被創造好的對象,是後者的子集;而後者包含了一些在運行過程中動態建立的物件。

引擎擴充物件是一個不太大的集合,一般來說比較確定,它們也屬於引擎的原生物件(但不屬於ECMA規範的原生物件)。

宿主物件不是引擎的原生對象,而是由宿主框架透過某種機制註冊到JavaScript引擎中的物件。

有些宿主會把自己提供的物件/建構器也稱為“原生物件”,例如Internet Explorer 7就把它提供的XMLHttpRequest()稱為原生的——與此相對的是在它的更早先版本中透過「new ActiveXObject('Microsoft.XMLHTTP')」這樣的方法所建立的物件。在這種情況下,讀者應注意到「宿主的原生物件」與「引擎的原生物件」之間的差異。

一、原生物件

  ECMA-262 把原生物件(native object)定義為「獨立於宿主環境的 ECMAScript 實作提供的物件」。

  Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError、ActiveXObject((Regp)、卷曆類(正規表示式)

  由此可以看出,簡單來說,原生物件就是ECMA-262 定義的類別(引用型別)。

二、內建物件

  ECMA-262 將內建物件(built-in object)定義為「由ECMAScript 實作提供的、獨立於宿主環境的所有對象,在ECMAScript 程式開始執行時出現」。這意味著開發者不必明確實例化內建對象,它已被實例化了。

  同樣是「獨立於宿主環境」。根據定義我們似乎很難分辨「內建物件」與「原生物件」的差異。而ECMA-262 只定義了兩個內建對象,分別是 Global 和 Math (它們也是原生對象,根據定義,每個內建對像都是原生對象)。

  如此就可以理解了。內建物件是原生物件的一種。而其包含的兩種物件中,Math物件我們常用到,可這個Global物件是啥東西呢?

  Global物件是ECMAScript中最特別的對象,因為其實它根本不存在!在ECMAScript中,不存在獨立的函數,所有函數都必須是某個物件的方法。

  類似isNaN()、parseInt()和parseFloat()方法等,看起來都是函數,而實際上,它們都是Global物件的方法。而且Global對象的方法還不只這些。

三、宿主物件

  何為「宿主物件」? ECMAScript中的「宿主」當然就是我們網頁的運作環境,也就是「作業系統」和「瀏覽器」。所有非原生物件都是宿主物件(host object),也就是由 ECMAScript 實作的宿主環境提供的物件。

  所有的 BOM 和 DOM 物件都是宿主物件。因為其對於不同的「宿主」環境所展示的內容不同。其實說白了就是,ECMAScript官方未定義的對像都屬於宿主對象,因為其未定義的對像大多是自己透過ECMAScript程式所建立的對象。 TML DOM 是 W3C 標準(是 HTML 文件物件模型的英文縮寫,Document Object Model for HTML)。

  HTML DOM 定義了用於 HTML 的一系列標準的對象,以及存取和處理 HTML 文件的標準方法。

  透過 DOM,可以存取所有的 HTML 元素,連同它們所包含的文字和屬性。可以對其中的內容進行修改和刪除,同時也可以建立新的元素。

【相關推薦:javascript學習教學

#

以上是javascript中宿主物件和原生物件的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn