Как создать замыкание с помощью N-API? - PullRequest
0 голосов
/ 02 июля 2019

Я хочу создать такой декоратор от Js.С помощью скалярных типов (число, строка ...) я конвертирую их в типы C ++, поэтому проблем нет.Как насчет других типов, таких как объект, функция и массив?Я обнаружил, что аргумент void * data может быть передан в Funtion :: New, но я не видел примеров.

Вот мой код Javascript

function Decorator (objectA) {

    return function (target, propertyKey, descriptor) {
        const backup = descriptor.value;

        descriptor.value = function (someParameters) {
            //do something with someParameters and objectA
            return backup.call(this, someParameters);
        }

        return descriptor;
    }
}

Мой код C ++

Value Decorator (const CallbackInfo& info) {
    //do something...
    auto objectA = info[0].As<Object>();

    return Function::New(info.Env(), [objectA] (const CallbackInfo& info) -> Value {
       //do something...
        auto target = info[0].As<Object>();
        auto propertyKey = info[1].As<String>();
        auto descriptor = info[2].As<Object>();
        auto backup = descriptor.Get("value").As<Function>();

        descriptor.Set("value", Function::New(env, [backup, descriptor, objectA] (const CallbackInfo& info) -> Value {
            //I want to access backup, objectA, but they've been already deleted at the time this function is called
        }

        return descriptor;
    }
}
...