V8中的數據類型

Js裏面每個基本數據類型在v8裏都有對應的類實現,其層次結構如下圖所示:

 

 

 

 

 

由於js是使用自動垃圾回收(gc)的語言,對象的引用都必須在對象被移動後立刻更新爲正確的地址,包括C++代碼中(類似於.net中的非託管代碼)保存的js對象引用(指針)。Js代碼在編譯的時候包含了足夠的元信息供gc單元使用,以找到所有的引用;而C++原生代碼沒有這個便利,所以C++代碼必須用一種特殊的方式來保存js對象引用,以便在運行時補充引用信息。

任何使用V8代碼的C++程序(包括V8本身),都必須使用Handle<T>模板來保存js對象的引用,其中T可以是任何js對象在V8中的實現類。Handle<T>又可進一步細分爲Local<T>和Persistent<T>兩種。顧名思義,前者是一種局部Handle,它隨着相關的HandleScope的析構而消失;後者則是與具體HandleScope無關的持久的Handle,它只有在執行Dispose()函數之後纔會消失。如下圖所示:

 

 

例如,Local<String> s就表示一個js字符串的局部引用。

轉載http://blog.csdn.net/lihuiba/archive/2008/09/28/2988226.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章