標籤:pre asp hello new 未定義 方法 推斷 cti class
名詞參考:
原生對象:也叫內部對象、本機物件、native object
內建對象:Build-in object
宿主對象:host object
ECMA-262 定義:
原生對象:獨立於宿主環境的ECMAScript實現提供的對象。與宿主無關,在javascript(遠景瀏覽器)、nodejs(node平台)、jscript(ie瀏覽器)、typescript(微軟平台)等等中均有這些對象。簡單來說,本機物件就是 ECMA-262 定義的類(參考型別)。在運行過程中動態建立的對象,需要new
內建對象:由 ECMAScript 實現提供的、獨立於宿主環境的所有對象,在 ECMAScript 程式開始執行時出現,即在引擎初始化階段就被建立好的對象。這意味著開發人員不必明確執行個體化內建對象,它已被執行個體化了
宿主對象:即由 ECMAScript 實現的宿主環境提供的對象,包含兩大類,一個是宿主提供,一個是自訂類對象,ECMAScript官方未定義的對象都屬於宿主對象,所有非本機物件都是宿主對象。宿主提供對象原理--->由宿主架構通過某種機制註冊到ECscript引擎中的對象,如宿主瀏覽器(以遠景為參考)會向ECscript注入window對象,構建其實現javascript。。
內容
原生對象:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError
內建對象:Global(全域對象)、Math
宿主對象:---->在瀏覽器中window對象以及其下邊所有的子物件(如bom、dom等等),在node中是globla及其子物件,也包含自訂的類對象。
其它對象:全域對象--->是內建對象的一個。自訂對象--->它屬於宿主對象
它們之間的關係
本機物件與內建對象:原生包含內建,內建是原生的一個子集。
宿主對象:內建對象的Global,就是宿主的頂層對象,如在瀏覽器中是window、在nodejs中是global
特別說明:
內建對象之Global
Global即為全域對象,Global對象是ECMAScript中最特別的對象,因為實際上它根本不存在!
在ECMAScript中,不存在獨立的函數,所有函數都必須是某個對象的方法。
類似於isNaN()、parseInt()和parseFloat()方法等,看起來都是函數,而實際上,它們都是Global對象的方法。
而且Global對象的方法還不止這些。具體參考http://www.w3school.com.cn/jsref/jsref_obj_global.asp
而且根據我目前沒有定論的推斷,Global對象與宿主有關,是宿主的頂層對象。比如在javascript中,Global對象即為window對象,以下代碼即可測試出
<script> var str=‘hello‘; //用宿主對象去 調用內建對象的函數 console.log(window.isNaN(str))</script>
由此可以推測出,當宿主為nodejs時候,nodejs的頂層對象是global,那麼這樣肯定不會報錯--global.isNaN(str)
拓展方法內容
無論是什麼對象,均可以通過prototype進行功能拓展。
js進階---本機物件、內建對象、宿主對象