问题标签 [duktape]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 当在 js 模块中定义对象构造函数时,从 C 调用 JS 对象构造函数
在微芯片 32 上使用 Duktape,一切运行良好。顺便说一句,当使用模块加载时(这也很有魅力),我面临着一种模式问题。让我解释一下:我在 js 模块中定义了一个构造函数
现在我在另一个程序中使用这个模块。
还在工作。
问题是:我如何从 C 调用 MyObject 构造函数,而不知道在需要模块(基本上与用户相关)时受影响的名称(' toto ')。
我希望使用“ MyObject ”而不是限制开发人员声明
我知道我可以完全在 c 中声明对象以避免这种情况,但也许你们中的一个人已经有了最佳实践。duktape 似乎也没有像 nodejs 那样定义对模块的全局范围的访问。(我也可以将它添加到 duk_module_node.c,但最终解决方案..)
感谢您的意见。
c++ - 迭代 Duktape 中的未知对象
所以我有这个 duktape 函数,它接受一个对象作为参数之一。在正常情况下,要检索每个对象属性的值,我会使用duk_get_prop()
and duk_push_string()
,但是这假设我事先知道我得到的对象的结构。
现在,考虑一个接受具有未知结构的对象的函数。我需要遍历它的键,并检索它的所有值。
我正在尝试将这样的对象转换为 C++std::map<string, string>
例如,从 Javascript 调用
myFunction({x: 1, y: 3, z: 35})
应该和myFunction({foo: 12, bar: 43})
.
这似乎duk_enum()
是一个合适的功能,但我不太了解它是如何工作的。
duktape - 使用 native-c construstor 从 c 构建新的 DUKTAPE js 对象
我正在尝试完全在 C 中构建 JS 对象,类似于以下JS:
在 NodeJS 模块中使用它的事实很重要,因为 A 和 B 都不是全局可访问的。
为此,我在C中编写了以下模式:
但正如我所怀疑的那样,在调用 duk_new 时没有正确设置 a 的原型,并且任何尝试在JS中使用失败的函数
关于如何解决这个问题的任何想法?我已经知道我可以将构造函数放在全局中,但我想是否有另一种直接的替代方法可以将原型与 c 函数绑定......
问候。
javascript - 将 duktape 2.1.0 中的本机 C 模块加载到
阅读操作方法文章后,我仍然迷失了方向。
据说
加载回调是一个 Duktape/C 函数,它采用已解析的模块 ID,并且:(1) 返回模块的 Ecmascript 源代码,如果没有源代码,则返回 undefined,例如对于纯 C 模块,(2) 可以填充 module.exports本身,并且 (3) 可以替换 module.exports。
但是在加载原生 C 模块时,
- 应该将什么推入值堆栈?
duk_push_undefined(ctx)
而不是duk_push_string(ctx, module_source)
? - 加载回调应该向其调用者返回什么?
return 0
而不是return 1
?
我尝试在加载回调中调用myobject_init
(使用http://wiki.duktape.org/HowtoNativeConstructor.htmlcb_load_module
中的默认实例) 。但 duktape 抱怨
TypeError:[object Object] 不可构造
当我评估时var MyObject = require("MyObject")
,无论我是否
- 将 undefined 压入值栈并返回 1,
- 或不向值堆栈中压入任何内容并返回 0。
embedded - 如何从 duktape 执行 shell 命令
我需要为应该能够执行 shell 命令的嵌入式设备构建一个 javascript 引擎(duktape 或 jerryscript)。如何做到这一点?
c - duktape 对多个绑定 js 函数使用通用 c 函数
我正在尝试使用 duktape 引擎将一个常见的 c 函数绑定到多个 javascript 函数。
我的问题是我需要在通用 c 函数中找出调用函数的名称。我觉得可以使用经常提到的 javascript 堆栈来实现这一点。
但是我对如何实现它没有具体的想法。有人知道如何做到这一点吗?
下面你可以找到我的 mwe。duk_get_invoking_function函数是强调我意图的伪代码。
duktape - duktape,修改本机 C 代码中的变量参数
我正在尝试修改在本机函数的参数中传递的变量,如下所示:
在我的本机中,我可以阅读 MyVar 的内容,其中:
但是,我需要在本机函数中修改这个变量的值。最好的方法是什么?(我不能使用 return 语句)谢谢。
javascript - 执行函数两次
好的,所以基本上我有一个很长的对象数组,我需要以数组作为参数多次调用 JavaScript 函数。每次调用函数时重新创建列表时,我已经让它工作了,但是尝试将数组移动到 Duktape 堆栈的顶部并没有按预期工作。也许我在完全错误的轨道上......
如您所见,在最底部我尝试调用duk_swap_top(ctx, arr_idx)
以将数组移动到顶部。显然,它并没有像我想象的那样做,而是返回TypeError: undefined not callable
。当用另一个替换它时,pushArray();
它会按预期工作,并且102和444都会被打印出来。
javascript - 了解闭包编译器警告
我正在使用谷歌的闭包编译器来优化+混淆我通过 Duktape 在 Android 应用程序中运行的代码。我已经成功处理了 Closure 向我抛出的大部分警告信息。然而,有一些让我很难过。我应该怎么做才能对付他们?
accessing name Date in externs has no effect. Perhaps you forgot to add a var keyword?
这是我在externs.js
提供给 Closure CLI 的文件中声明的对象。
它抛出了指向上面for循环中WARNING - unreachable code
的错误指示器。^^^
i++
^^^
指示器指向obj
in Object.keys(obj)
。我意识到JSON.parse()
这里可能会返回null
,所以我尝试进行明确的测试,null
但这并没有帮助。
duktape - 在 duktape 中运行构造函数时如何获取类名?
我想使用单个 duktape/C 构造函数作为此类调用的调度程序。当调用调度程序函数时,我需要知道这恰好为哪个类调用了适当的 C++ 构造函数。
我想this
绑定不会有帮助,因为它代表了我们在这里创建的(尚未完全初始化的)JS 对象。
另一种选择是当前函数,但从文档中我看不到如何从中获取类名。我还能用什么?