• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            雖不能至,心向往之

            —— 巴人也,操C++口音,混跡于京師,勉強度日……《史記·corelito列傳》
            posts - 8, comments - 15, trackbacks - 0, articles - 0

            使用V8——Google Chrome 的 JavaScript 引擎(3)

            Posted on 2008-10-19 23:35 sufan 閱讀(3008) 評論(1)  編輯 收藏 引用 所屬分類: 翻譯
            訪問器——訪問腳本中的變量
            我們已經能夠在腳本中使用函數了。但如果我們能夠使用在腳本中定義的變量什么的豈不是更好?說做就做!V8有一個叫做訪問器的東西,有了它,我們就能通過名字來使用變量以及與它相關的兩個Set/Get函數,在運行腳本程序的時候,V8就是通過這兩個函數來實現對變量的訪問。

            global->SetAccessor(v8::String::New("x"), XGetter, XSetter);

            這行代碼就將“x”與“XGetter”和“XSetter”函數聯系在一起了。當V8需要得到“x”變量的值的時候,它就會去調用“XGetter”函數,相類似的,如果V8要更新“x”變量的值的時候,它調用的是“XSetter”函數。現在,我們的代碼成了:

            //the x variable!
            int x;

            //
            get the value of x variable inside javascript
            static v8::Handle<v8::Value> XGetter( v8::Local<v8::String> name, 
                              
            const v8::AccessorInfo& info) {
              
            return  v8::Number::New(x);
            }

            //
            set the value of x variable inside javascript
            static void XSetter( v8::Local<v8::String> name, 
                   v8::Local
            <v8::Value> value, const v8::AccessorInfo& info) {
              x 
            = value->Int32Value();
            }

            在 XGetter 函數中,我們所要做的只是將“x”轉換成V8所能管理的 Number 類型的值。而在 XSetter 函數中,我們需要將這個作為參數傳過來的值轉換成一個整數。就像對應其基類型的函數,例如 NumberValue 之于 double,BooleanValue 之于 bool,等等。

            對于 char * 類型的字符串,我們同樣有:

            //the username accessible on c++ and inside the script
            char username[1024];

            //
            get the value of username variable inside javascript
            v8::Handle<v8::Value> userGetter(v8::Local<v8::String> name, 
                       
            const v8::AccessorInfo& info) {
                
            return v8::String::New((char*)&username,strlen((char*)&username));
            }

            //
            set the value of username variable inside javascript
            void userSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value,
                
            const v8::AccessorInfo& info) {
                v8::Local
            <v8::String> s = value->ToString();
                s
            ->WriteAscii((char*)&username);
            }

             

            對于字符串,情況就有一點小小的變化了。userGetter 以 XGetter 相類似的方式創建了一個新字符串,但是 userSetter 首先需要使用 ToString 函數來訪問內部字符串緩沖區。然后,我們通過得到的指向內部字符串對象的指針,使用 WriteAscii 函數將字符串的內容寫到我們的緩沖區。最后添加相對應的訪問器,一切搞定!

            //create accessor for string username
            global->SetAccessor(v8::String::New("user"),userGetter,userSetter);

            Feedback

            # re: 使用V8——Google Chrome 的 JavaScript 引擎(3)  回復  更多評論   

            2011-07-07 13:19 by 有趣之極
            很好,學習
            91亚洲国产成人久久精品| 久久久亚洲欧洲日产国码二区| 久久久久亚洲AV成人片| 狠狠色丁香久久婷婷综合_中 | 久久久久久久久久免免费精品| 精品久久国产一区二区三区香蕉| 中文字幕无码久久精品青草 | 久久国产亚洲高清观看| 国产免费久久久久久无码| 亚洲国产精品高清久久久| 激情久久久久久久久久| 久久99精品国产自在现线小黄鸭 | 久久99精品久久久久久秒播| 精产国品久久一二三产区区别| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲伊人久久成综合人影院| 国产麻豆精品久久一二三| 久久中文字幕人妻熟av女| 久久久噜噜噜久久| 色综合久久综合网观看| MM131亚洲国产美女久久| 伊人久久综合成人网| 蜜桃麻豆WWW久久囤产精品| 青青青青久久精品国产h久久精品五福影院1421 | 99久久精品免费国产大片| 亚洲女久久久噜噜噜熟女| 色综合久久天天综线观看| 久久国产成人| 欧美无乱码久久久免费午夜一区二区三区中文字幕| 亚洲乱码精品久久久久..| 久久精品国产99国产精品澳门 | 无码AV中文字幕久久专区| 久久天天躁狠狠躁夜夜2020一| 久久亚洲2019中文字幕| 日韩欧美亚洲国产精品字幕久久久| 伊人久久大香线蕉影院95| 国产午夜精品久久久久九九电影| 精品无码久久久久久久动漫| 亚洲AV伊人久久青青草原| 色天使久久综合网天天| 无码精品久久久天天影视|