上一章,比較略提了下v8的context。本章将詳細的講解下context的概念以及用法。
context是v8中一個非常重要的類,了解起來就一句話:javascript的執行環境。context中包了javascript内建函數、對象等。是以,通過context::new出來的context都是一個全新的幹淨的javascript執行環境,切其他javascript環境的更改不影響new出來的context的javascript執行環境,例如:修改javascript global函數。
注:使用了附錄函數
demo代碼如下:
script.js
context之間的切換下圖所示:

列印結果分别為:
1
5
可以看出,contextafunc和contextbfunc分别位于不同的context,在contextafunc中對全局函數做了更改,是以第一次列印無論如何都是1,而contextbfunc中,new了一個contextb,整個js執行在contextb中,擁有一個全新的幹淨的javascript執行環境,是以,列印是5。
v8程式設計中,需要在不同的context中進行切換,需要建立各種context。這樣會不會影響執行效率呢?v8已經考慮到這一點了,v8在除了建立第一個context的時候,消耗的時間較長外,建立其他的context的時候,開銷非常小,v8對context需要建立的一些javascript的内建對象即可。
context常用函數講解:
extensions 給新建立的context建立擴充,一般都是null
global_template,這個參數比較有用,context中的javascript的global對象是通過這個global_template建立的。當我們需要給javascript的global添加c++函數是,一般都是通過這個給這個global_template添加屬性進而傳遞給javascript的global對象的。
golobal_object,其目的是是的global對象得到複用。可以是的不同的context有相同的global對象。前提條件是必須使用相同的global_template。
用于不同的context之間切換。
版權申明:
轉載文章請注明原文出處,任何用于商業目的,請聯系本人:[email protected]