【问题标题】:Fallback callback when calling unavailable function调用不可用函数时的回退回调
【发布时间】:2014-01-12 00:27:08
【问题描述】:

是否可以设置当用户想要调用不存在的函数时调用的回退回调?例如

my_object.ThisFunctionDoesNotExists(2, 4);

现在我希望调用一个函数,其中第一个参数是名称和一个带有传递参数的堆栈(或类似的东西)。澄清一下,回退回调应该是一个 C++ 函数。

【问题讨论】:

    标签: v8 embedded-v8


    【解决方案1】:

    假设您的问题是关于从标签推断的嵌入式 V8 引擎,您可以使用 Harmony Proxies 功能:

    var A = Proxy.create({
        get: function (proxy, name) {
            return function (param) {
                console.log(name, param);
            }
        }
    });
    
    A.hello('world');  // hello world
    

    使用--harmony_proxies 参数启用此功能。来自 C++ 代码:

    static const char v8_flags[] = "--harmony_proxies";
    v8::V8::SetFlagsFromString(v8_flags, sizeof(v8_flags) - 1);
    

    其他方式:

    v8::ObjectTemplate 上有一个名为SetNamedPropertyHandler 的方法,因此您可以拦截属性访问。例如:

    void GetterCallback(v8::Local<v8::String> property,
        const v8::PropertyCallbackInfo<v8::Value>& info)
    {
        // This will be called on property read
        // You can return function here to call it
    }
    ...
    
    object_template->SetNamedPropertyHandler(GetterCallback);
    

    【讨论】:

    • 谢谢,但我希望在 C++ 中具有完全相同的行为。所以“代理”函数应该调用 C++ 后备。抱歉我的描述不好。
    • 好的,更新了我的答案。没有和谐代理也可以做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2015-10-16
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多