Google V8 編程入門(二) – 使用c++訪問js指令碼對象

來源:互聯網
上載者:User
// v8test.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <v8.h>#pragma comment(lib, "v8_base.lib")#pragma comment(lib, "v8_snapshot.lib")#pragma comment(lib, "ws2_32.lib")#pragma comment(lib, "winmm.lib")using namespace v8;int main(int argc, char* argv[]) {// Create a stack-allocated handle scope.HandleScope handle_scope;// Create a new context.Handle<Context> context = Context::New();// Enter the created context for compiling and// running the hello world script. Context::Scope context_scope(context);// Create a string containing the JavaScript source code.Handle<String> source = String::New("""function MyObj() ""{""this.myArray = [1,2,2,2,2,2]; ""this.myDouble = Math.PI; ""}""MyObj.prototype.myFunction = function(arg1,arg2)""{""return (this.myDouble + arg1 + arg2); ""};""var globalObject = new MyObj();");String * str = *source;// Compile the source code.Handle<Script> script = Script::Compile(source);// Run the script to get the result.Handle<Value> result = script->Run();// Convert the result to an ASCII string and print it.String::AsciiValue ascii(result);printf("%s\n", *ascii);// 通過變數名擷取對象,全域變數隸屬於Global()對象Local<Object> globalObject = Local<Object>::Cast(context->Global()->Get(String::New("globalObject")));// 擷取globalObject對象的myArray屬性Handle<Array> arrayproperty = Handle<Array>::Cast(globalObject->Get(String::New("myArray")));String::AsciiValue ascii2(arrayproperty);printf("%s\n", *ascii2);// 擷取globalObject對象的myDouble屬性Handle<Object> doubleproperty = Handle<Object>::Cast(globalObject->Get(String::New("myDouble")));String::AsciiValue ascii3(doubleproperty);printf("%s\n", *ascii3);// 擷取globalObject對象的myFunction屬性Local<Function> func = Local<Function>::Cast(globalObject->Get(String::New("myFunction")));Local<Value> argv2 [2] = {v8::Number::New(1.123123), v8::Number::New(2.234234)};// 調用myFunction函數對象String::AsciiValue ascii4(func->Call(globalObject, 2, argv2));printf("%s\n", *ascii4);// Dispose the persistent context.(Persistent<Context>(context)).Dispose();return 0;}

運行結果:

function (arg1,arg2){return (this.myDouble + arg1 + arg2); }1,2,2,2,2,23.1415926535897936.498949653589793請按任意鍵繼續. . .

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.