前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2202.6.28日报:miniv8实现URLSearchParams

2202.6.28日报:miniv8实现URLSearchParams

作者头像
龙泉寺扫地僧
发布2022-06-29 15:09:45
1550
发布2022-06-29 15:09:45
举报
文章被收录于专栏:盟主来了盟主来了

URLSearchParams这东西有点特殊。主要是以下两种用法:

代码语言:javascript
复制
var paramsString = "q=URLUtils.searchParams&topic=api"
var searchParams = new URLSearchParams(paramsString);

var keys = searchParams.keys();
var ret = keys[Symbol.iterator];
console.log("ret::" + ret);

也就是说需要给keys实现Symbol.iterator属性。

quickjs并没有导出Symbol.iterator相关的接口,需要我们自行添加一下。

主要的添加点是:JS_NewAtomWithSymbol、JS_SymbolGetIterator

也就是把quickjs自己用的JS_ATOM_Symbol_iterator(这是个常量)导出来。

注意这里不能是直接用JS_NewAtom(ctx, "Symbol.iterator");去生成atom,这会和JS_ATOM_Symbol_iterator不一样。

另外就是

代码语言:javascript
复制
var keys = searchParams.keys();
for(var key of keys) {
  console.log("key::" + key);
}

这种遍历keys的调用方式,我发现只要给searchParams注册了next函数,quickjs就会自动调用过来:

(下面是调用堆栈)

blink::IteratorV8Internal::nextMethodCallback v8::internal::FunctionCallbackArguments::onCFunctionCallback js_call_c_function JS_CallInternal JS_Call JS_IteratorNext2 JS_IteratorNext js_for_of_next JS_CallInternal JS_CallFree JS_EvalFunctionInternal

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档