JavascriptCore中扩展自定义函数

简介: JavaScriptCore中预定义了不少函数,可以直接使用,也可以扩展子定义的函数,我们扩展的自定义函数肯定是在全局访问空间,那么 需要继承JSGlobalObject自定义自己的全局访问空间,或者干脆直接修改也可以 具体来说就是在构造函数中添加下面一句: putDirectFunction(gl...

JavaScriptCore中预定义了不少函数,可以直接使用,也可以扩展子定义的函数,我们扩展的自定义函数肯定是在全局访问空间,那么

需要继承JSGlobalObject自定义自己的全局访问空间,或者干脆直接修改也可以

具体来说就是在构造函数中添加下面一句:

putDirectFunction(globalExec(), new (globalExec()) NativeFunctionWrapper(globalExec(), prototypeFunctionStructure(), 1, Identifier(globalExec(), "print"), functionPrint));

这样就有一个print函数可以访问了 ,而函数的实现则是functionPrint,

定义如下:

JSValue JSC_HOST_CALL functionPrint(ExecState* exec, JSObject*, JSValue, const ArgList& args)
{
    for (unsigned i = 0; i < args.size(); ++i) {
        if (i != 0)
            putchar(' ');
        printf("%s", args.at(i).toString(exec).UTF8String().c_str());
    }
    putchar('\n');
    fflush(stdout);
    return jsUndefined();
}

 

前面的我们都不用考虑,主要是最后一个args,它里面包含了想要的参数,下面是使用示例:

$ jsc.exe
> print(3)
3
undefined
> print(3,4,5)
3 4 5
undefined
>

目录
相关文章
|
6月前
|
存储 编译器 C语言
【C++11特性篇】模板的新一力将:可变参数模板 [全解析]
【C++11特性篇】模板的新一力将:可变参数模板 [全解析]
|
6月前
【建议】强烈推荐ES6函数自由传参的写法,针对方法体的可扩展性很有帮助
【建议】强烈推荐ES6函数自由传参的写法,针对方法体的可扩展性很有帮助
|
2月前
|
存储 API 调度
Cython 的扩展类
Cython 的扩展类
13 0
|
3月前
|
数据可视化 数据挖掘 数据处理
R语言函数与自定义函数:提高代码的复用性
【8月更文挑战第27天】 自定义函数是R语言编程中不可或缺的一部分,它们通过封装复杂的逻辑和提供灵活的参数化设计,极大地提高了代码的复用性和可维护性。通过掌握自定义函数的基本语法和高级技巧,我们可以编写出更加高效、可读的R语言代码,从而更好地应对复杂的数据分析和统计建模任务。
|
5月前
|
数据安全/隐私保护 Python
Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。
【6月更文挑战第20天】Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。例如,`@simple_decorator` 包装`my_function`,在调用前后添加额外操作。装饰器还能接受参数,如`@logged(&quot;INFO&quot;, &quot;msg&quot;)`,允许动态定制功能。
41 6
|
6月前
|
前端开发 程序员 开发者
自己封装的一些工具函数
自己封装的一些工具函数
|
算法 编译器 C++
如何编写一个通用的函数?
如何编写一个通用的函数?
97 2
学习TypeScrip5(函数扩展)
学习TypeScrip5(函数扩展)
91 0
gstreamer插件特别要注意事件处理(含代码范例)
gstreamer插件特别要注意事件处理(含代码范例)
168 0
|
Kotlin
【Kotlin】扩展函数作用域分析 ( 扩展函数导入 | 扩展函数重载 | 扩展函数作用域优先级 )(二)
【Kotlin】扩展函数作用域分析 ( 扩展函数导入 | 扩展函数重载 | 扩展函数作用域优先级 )(二)
251 0
【Kotlin】扩展函数作用域分析 ( 扩展函数导入 | 扩展函数重载 | 扩展函数作用域优先级 )(二)