• <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++口音,混跡于京師,勉強(qiáng)度日……《史記·corelito列傳》
            posts - 8, comments - 15, trackbacks - 0, articles - 0

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

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

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

            這行代碼就將“x”與“XGetter”和“XSetter”函數(shù)聯(lián)系在一起了。當(dāng)V8需要得到“x”變量的值的時(shí)候,它就會(huì)去調(diào)用“XGetter”函數(shù),相類似的,如果V8要更新“x”變量的值的時(shí)候,它調(diào)用的是“XSetter”函數(shù)。現(xiàn)在,我們的代碼成了:

            //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 函數(shù)中,我們所要做的只是將“x”轉(zhuǎn)換成V8所能管理的 Number 類型的值。而在 XSetter 函數(shù)中,我們需要將這個(gè)作為參數(shù)傳過來的值轉(zhuǎn)換成一個(gè)整數(shù)。就像對(duì)應(yīng)其基類型的函數(shù),例如 NumberValue 之于 double,BooleanValue 之于 bool,等等。

            對(duì)于 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);
            }

             

            對(duì)于字符串,情況就有一點(diǎn)小小的變化了。userGetter 以 XGetter 相類似的方式創(chuàng)建了一個(gè)新字符串,但是 userSetter 首先需要使用 ToString 函數(shù)來訪問內(nèi)部字符串緩沖區(qū)。然后,我們通過得到的指向內(nèi)部字符串對(duì)象的指針,使用 WriteAscii 函數(shù)將字符串的內(nèi)容寫到我們的緩沖區(qū)。最后添加相對(duì)應(yīng)的訪問器,一切搞定!

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

            Feedback

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

            2011-07-07 13:19 by 有趣之極
            很好,學(xué)習(xí)
            亚洲国产精品久久久久久| 久久午夜综合久久| 亚洲七七久久精品中文国产 | 伊人久久大香线蕉AV色婷婷色| 99久久免费只有精品国产| 老色鬼久久亚洲AV综合| 国产成人精品久久| 久久人人爽人人爽人人av东京热| 亚洲国产天堂久久综合| 久久99精品久久久久久噜噜 | 天天爽天天爽天天片a久久网| 久久综合狠狠综合久久综合88| 国产精品久久久久久久app| 久久性生大片免费观看性| 麻豆久久| 伊人久久大香线蕉亚洲| 久久精品国产亚洲77777| 国产成年无码久久久久毛片| 久久精品a亚洲国产v高清不卡| 久久av无码专区亚洲av桃花岛| 国产午夜精品久久久久免费视| 久久精品国产亚洲AV无码麻豆| 久久99国产精品二区不卡| 久久se精品一区精品二区国产| 无码任你躁久久久久久| 人妻无码精品久久亚瑟影视| 久久无码中文字幕东京热 | 成人久久免费网站| 俺来也俺去啦久久综合网| 久久国产成人午夜aⅴ影院| 偷偷做久久久久网站| 久久超碰97人人做人人爱| 秋霞久久国产精品电影院| 久久久久国产一级毛片高清板| 日日狠狠久久偷偷色综合0| 中文字幕人妻色偷偷久久| 91精品国产乱码久久久久久| 久久成人永久免费播放| 久久99精品国产自在现线小黄鸭 | 日产精品久久久久久久性色| 国产美女久久久|