天天看點

Google V8程式設計詳解(四)Context

上一章,比較略提了下v8的context。本章将詳細的講解下context的概念以及用法。

context是v8中一個非常重要的類,了解起來就一句話:javascript的執行環境。context中包了javascript内建函數、對象等。是以,通過context::new出來的context都是一個全新的幹淨的javascript執行環境,切其他javascript環境的更改不影響new出來的context的javascript執行環境,例如:修改javascript global函數。

注:使用了附錄函數

demo代碼如下:

script.js

context之間的切換下圖所示:

Google V8程式設計詳解(四)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]

繼續閱讀