用NAN簡化Google V8 JS引擎的擴展

通過C++擴展Google V8 JS引擎的文章很多,Google V8 JS帶的例子也容易明白。但是大部分文章都是Hello World型的,真正使用時發現處處是坑。擴展V8最經典的例子就是node了,如果要做實際項目,研究一下node本身和及其擴展模塊大有裨益。

提到node的C++擴展就不得不提nan,nan是Native Abstractions for Node.js的簡稱,它讓擴展V8變得很容易,特別是用類來擴展的時候。

類從ObjectWrap繼承過來,如:

class Location: public ObjectWrap {
public:
    Location();
    ~Location();
...

用ObjectWrap::Unwrap把JS對象轉換成C++對象:

NAN_SETTER(LocationSetProtocol) {
    NanScope();
    Location* obj = ObjectWrap::Unwrap<Location>(args.This());
    if (value->IsString()) {
        v8::String::Utf8Value nativeValue(value);
        obj->setProtocol(*nativeValue);
    }else{
        printf("invalid data type for Location.protocol\n");
    }
}

完整代碼請參考:https://github.com/drawapp8/cantk-runtime-v8/tree/master/src/cantk-rt

nan依賴與node的一些宏和函數,我花了點時間把它獨立出來的,你可以到這裏下載:https://github.com/drawapp8/v8-native-binding-generator/tree/master/nan

發佈了679 篇原創文章 · 獲贊 201 · 訪問量 428萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章