js高級---本地對象、內置對象、宿主對象


 

名詞參考:
原生對象:也叫內部對象、本地對象、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
內置對象:Global(全局對象)、Math
宿主對象:有宿主提供的對象,在瀏覽器中window對象以及其下邊所有的子對象(如bom、dom等等),在node中是globla及其子對象,也包含自定義的類對象。【何為“宿主對象”?  在web中,ECMAScript中的“宿主”當然就是我們網頁的運行環境,即“操作系統”和“瀏覽器”。所有非本地對象都是宿主對象(host object),即由 ECMAScript 實現的宿主環境提供的對象。】
全局對象:一般全局對象會有兩個,一個是ecma提供的Global對象,一個是宿主提供。如在瀏覽器中是window、在nodejs中是global。【所以啊,在瀏覽器中全局對象是Global+window】
通常情況下ecma提供的Global對象對是不存在的,沒有具體的對象,

查看window下,當前所有的成員,除了console.log(window),你還可以這么做
在chrome進行debug時候中有個scope,當前作用域,其中Global只顯示了window所有的成員,並沒有顯示Ecma的Global,因為我沒有找到Ecma提供的Global任何字段和函數

 

 

 

 

 

它們之間的關系
本地對象與內置對象:原生包含內置,內置是原生的一個子集。
宿主對象:內置對象的Global和宿主提供的一個全局對象,

本地對象為array obj regexp等可以new實例化
內置對象為gload Math 等不可以實例化的
宿主為宿主注入到全局的對象,如瀏覽器的window 等


特別說明:
內置對象之Global
Global即為全局對象,Global對象是ECMAScript中最特別的對象,因為實際上它根本不存在!
在ECMAScript中,不存在獨立的函數,所有函數都必須是某個對象的方法。
類似於isNaN()、parseInt()和parseFloat()方法等,看起來都是函數,而實際上,它們都是Global對象的方法。
而且Global對象的方法還不止這些。具體參考http://www.w3school.com.cn/jsref/jsref_obj_global.asp

 

拓展方法內容
無論是什么對象,均可以通過prototype進行功能拓展。

打印瀏覽器的全局對象
打印自定義的對象,會顯示出源碼,但是打印全局對象,因為這些全局對象是程序自帶的,是二進制編譯的,所以無法顯示出來源代碼
它就只能給你‘native code’

<script>
    var myfc=function(){var a=123;}
    console.log(myfc)//瀏覽器全局對象之window下自定義的myfc函數
    console.log(alert)//瀏覽器全局對象之window的alert函數
    console.log(isNaN)//瀏覽器全局對象之Global的isNaN函數
</script>

 

 

相關
http://blog.csdn.net/zihuanzq_2014/article/details/52006504
http://www.jb51.net/article/85831.htm
http://lzw.me/pages/ecmascript/
http://yanhaijing.com/es5/#4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM