问题标签 [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.

0 投票
1 回答
115 浏览

node.js - 当在 js 模块中定义对象构造函数时,从 C 调用 JS 对象构造函数

在微芯片 32 上使用 Duktape,一切运行良好。顺便说一句,当使用模块加载时(这也很有魅力),我面临着一种模式问题。让我解释一下:我在 js 模块中定义了一个构造函数

现在我在另一个程序中使用这个模块。

还在工作。

问题是:我如何从 C 调用 MyObject 构造函数,而不知道在需要模块(基本上与用户相关)时受影响的名称(' toto ')。

我希望使用“ MyObject ”而不是限制开发人员声明

我知道我可以完全在 c 中声明对象以避免这种情况,但也许你们中的一个人已经有了最佳实践。duktape 似乎也没有像 nodejs 那样定义对模块的全局范围的访问。(我也可以将它添加到 duk_module_node.c,但最终解决方案..)

感谢您的意见。

0 投票
1 回答
583 浏览

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()是一个合适的功能,但我不太了解它是如何工作的。

0 投票
1 回答
435 浏览

duktape - 使用 native-c construstor 从 c 构建新的 DUKTAPE js 对象

我正在尝试完全在 C 中构建 JS 对象,类似于以下JS

在 NodeJS 模块中使用它的事实很重要,因为 A 和 B 都不是全局可访问的。

为此,我在C中编写了以下模式:

但正如我所怀疑的那样,在调用 duk_new 时没有正确设置 a 的原型,并且任何尝试在JS中使用失败的函数

关于如何解决这个问题的任何想法?我已经知道我可以将构造函数放在全局中,但我想是否有另一种直接的替代方法可以将原型与 c 函数绑定......

问候。

0 投票
1 回答
447 浏览

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。
0 投票
1 回答
287 浏览

embedded - 如何从 duktape 执行 shell 命令

我需要为应该能够执行 shell 命令的嵌入式设备构建一个 javascript 引擎(duktape 或 jerryscript)。如何做到这一点?

0 投票
1 回答
382 浏览

c - duktape 对多个绑定 js 函数使用通用 c 函数

我正在尝试使用 duktape 引擎将一个常见的 c 函数绑定到多个 javascript 函数。

我的问题是我需要在通用 c 函数中找出调用函数的名称。我觉得可以使用经常提到的 javascript 堆栈来实现这一点。

但是我对如何实现它没有具体的想法。有人知道如何做到这一点吗?

下面你可以找到我的 mwe。duk_get_invoking_function函数是强调我意图的伪代码。

0 投票
1 回答
270 浏览

duktape - duktape,修改本机 C 代码中的变量参数

我正在尝试修改在本机函数的参数中传递的变量,如下所示:

在我的本机中,我可以阅读 MyVar 的内容,其中:

但是,我需要在本机函数中修改这个变量的值。最好的方法是什么?(我不能使用 return 语句)谢谢。

0 投票
1 回答
203 浏览

javascript - 执行函数两次

好的,所以基本上我有一个很长的对象数组,我需要以数组作为参数多次调用 JavaScript 函数。每次调用函数时重新创建列表时,我已经让它工作了,但是尝试将数组移动到 Duktape 堆栈的顶部并没有按预期工作。也许我在完全错误的轨道上......

如您所见,在最底部我尝试调用duk_swap_top(ctx, arr_idx)以将数组移动到顶部。显然,它并没有像我想象的那样做,而是返回TypeError: undefined not callable。当用另一个替换它时,pushArray();它会按预期工作,并且102444都会被打印出来。

0 投票
1 回答
541 浏览

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++

^^^指示器指向objin Object.keys(obj)。我意识到JSON.parse()这里可能会返回null,所以我尝试进行明确的测试,null但这并没有帮助。

0 投票
1 回答
229 浏览

duktape - 在 duktape 中运行构造函数时如何获取类名?

我想使用单个 duktape/C 构造函数作为此类调用的调度程序。当调用调度程序函数时,我需要知道这恰好为哪个类调用了适当的 C++ 构造函数。

我想this绑定不会有帮助,因为它代表了我们在这里创建的(尚未完全初始化的)JS 对象。

另一种选择是当前函数,但从文档中我看不到如何从中获取类名。我还能用什么?