可以使用 SpiderMonkey 用 C++ 编写 JS 对象的构造函数吗?

Can a JS Object's constructor be written in C++ with SpiderMonkey?

我想使用 SpiderMonkey 38 的 API 在 C++ 中为 Javascript 对象实现一个构造函数。但是构造函数需要访问 this (正在构造的 JS 对象)并且 JS::CallArgs 的文档说你不能从构造函数调用 thisv() ,而不建议任何替代方法。这是否意味着实际上不可能用 C++ 编写有用的构造函数?

在 C++ 中,您只需自己创建应该从构造函数返回的对象。 (没有创建可从 this 为您访问的初始对象)根据您的需要,您应该考虑为该对象创建一个新的 JSClass。

bool
MyConstructor(JSContext* cx, unsigned argc, JS::Value* vp)
{
  CallArgs args = CallArgsFromVp(argc, vp);

  JS::RootedObject obj(cx, JS_NewObject(cx, MyJSClass));
  if (!obj)
    return false;

  args.rval().setObject(*obj);
  return true;
}