溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

javascript中宿主對(duì)象和原生對(duì)象有什么區(qū)別

發(fā)布時(shí)間:2021-07-06 17:59:49 來(lái)源:億速云 閱讀:235 作者:Leah 欄目:web開發(fā)

本篇文章為大家展示了javascript中宿主對(duì)象和原生對(duì)象有什么區(qū)別,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

區(qū)別:原生對(duì)象是獨(dú)立于宿主環(huán)境的ECMAScript實(shí)現(xiàn)提供的對(duì)象,即ECMA-262定義的類(引用類型);而宿主對(duì)象是由ECMAScript實(shí)現(xiàn)的宿主環(huán)境提供的對(duì)象,所有非原生對(duì)象都是宿主對(duì)象。

內(nèi)置(Build-in)對(duì)象與原生(Naitve)對(duì)象的區(qū)別在于:前者總是在引擎初始化階段就被創(chuàng)建好的對(duì)象,是后者的一個(gè)子集;而后者包括了一些在運(yùn)行過(guò)程中動(dòng)態(tài)創(chuàng)建的對(duì)象。

引擎擴(kuò)展對(duì)象是一個(gè)并不太大的集合,一般來(lái)說(shuō)比較確定,它們也屬于引擎的原生對(duì)象(但不屬于ECMA規(guī)范的原生對(duì)象)。

宿主對(duì)象不是引擎的原生對(duì)象,而是由宿主框架通過(guò)某種機(jī)制注冊(cè)到JavaScript引擎中的對(duì)象。

一些宿主會(huì)把自己提供的對(duì)象/構(gòu)造器也稱為“原生對(duì)象”,例如Internet Explorer 7就把它提供的XMLHttpRequest()稱為原生的——與此相對(duì)的是在它的更早先版本中通過(guò)“new ActiveXObject('Microsoft.XMLHTTP')”這樣的方法創(chuàng)建的對(duì)象。這種情況下,讀者應(yīng)注意到“宿主的原生對(duì)象”與“引擎的原生對(duì)象”之間的差異。

一、原生對(duì)象

  ECMA-262 把原生對(duì)象(native object)定義為“獨(dú)立于宿主環(huán)境的 ECMAScript 實(shí)現(xiàn)提供的對(duì)象”。

  Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError、ActiveXObject(服務(wù)器方面)、Enumerator(集合遍歷類)、RegExp(正則表達(dá)式)

  由此可以看出,簡(jiǎn)單來(lái)說(shuō),原生對(duì)象就是 ECMA-262 定義的類(引用類型)。

二、內(nèi)置對(duì)象

  ECMA-262 把內(nèi)置對(duì)象(built-in object)定義為“由 ECMAScript 實(shí)現(xiàn)提供的、獨(dú)立于宿主環(huán)境的所有對(duì)象,在 ECMAScript 程序開始執(zhí)行時(shí)出現(xiàn)”。這意味著開發(fā)者不必明確實(shí)例化內(nèi)置對(duì)象,它已被實(shí)例化了。

  同樣是“獨(dú)立于宿主環(huán)境”。根據(jù)定義我們似乎很難分清“內(nèi)置對(duì)象”與“原生對(duì)象”的區(qū)別。而ECMA-262 只定義了兩個(gè)內(nèi)置對(duì)象,即 Global 和 Math (它們也是原生對(duì)象,根據(jù)定義,每個(gè)內(nèi)置對(duì)象都是原生對(duì)象)。

  如此就可以理解了。內(nèi)置對(duì)象是原生對(duì)象的一種。而其包含的兩種對(duì)象中,Math對(duì)象我們經(jīng)常用到,可這個(gè)Global對(duì)象是啥東西呢?

  Global對(duì)象是ECMAScript中最特別的對(duì)象,因?yàn)閷?shí)際上它根本不存在!在ECMAScript中,不存在獨(dú)立的函數(shù),所有函數(shù)都必須是某個(gè)對(duì)象的方法。

  類似于isNaN()、parseInt()和parseFloat()方法等,看起來(lái)都是函數(shù),而實(shí)際上,它們都是Global對(duì)象的方法。而且Global對(duì)象的方法還不止這些。

三、宿主對(duì)象

  何為“宿主對(duì)象”? ECMAScript中的“宿主”當(dāng)然就是我們網(wǎng)頁(yè)的運(yùn)行環(huán)境,即“操作系統(tǒng)”和“瀏覽器”。所有非原生對(duì)象都是宿主對(duì)象(host object),即由 ECMAScript 實(shí)現(xiàn)的宿主環(huán)境提供的對(duì)象。

  所有的 BOM 和 DOM 對(duì)象都是宿主對(duì)象。因?yàn)槠鋵?duì)于不同的“宿主”環(huán)境所展示的內(nèi)容不同。其實(shí)說(shuō)白了就是,ECMAScript官方未定義的對(duì)象都屬于宿主對(duì)象,因?yàn)槠湮炊x的對(duì)象大多數(shù)是自己通過(guò)ECMAScript程序創(chuàng)建的對(duì)象。TML DOM 是 W3C 標(biāo)準(zhǔn)(是 HTML 文檔對(duì)象模型的英文縮寫,Document Object Model for HTML)。

  HTML DOM 定義了用于 HTML 的一系列標(biāo)準(zhǔn)的對(duì)象,以及訪問(wèn)和處理 HTML 文檔的標(biāo)準(zhǔn)方法。

  通過(guò) DOM,可以訪問(wèn)所有的 HTML 元素,連同它們所包含的文本和屬性。可以對(duì)其中的內(nèi)容進(jìn)行修改和刪除,同時(shí)也可以創(chuàng)建新的元素。

上述內(nèi)容就是javascript中宿主對(duì)象和原生對(duì)象有什么區(qū)別,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI