javascript - core-js/babel-polyfill polyfill 函数显示为 [native code]

标签 javascript node.js babeljs babel-polyfill

使用 core-js 填充的函数(例如,babel-polyfill)显示为原生。

Promise.race.toString() 产生:

function race() {
    [native code]
}

Object.values.toString()也是如此。

虽然它们肯定不是浏览器的 native 实现。例子是 Babel REPL页面。

开发人员如何以编程方式检查函数不是 native 实现而是模仿 native 函数的 polyfill(例如,当已知特定的 polyfill 可能会导致应用程序出现问题时)?

通常 native code regexp 会有所帮助,但事实并非如此。

如何从这些函数中检索源代码?我主要对 Node.js 感兴趣,但欢迎跨平台解决方案。

这个技巧究竟是怎么做到的?我在 core-jsbabel-polyfill 源代码中找不到native code 搜索。

最佳答案

core-js 尝试通过替换 Function.prototype.toString here 使其 polyfilled 功能看起来像 native 实现的一样有一个回退到默认版本的版本,但允许 core-js 在需要时通过在 fn[SRC] 处设置一个值来覆盖字符串值。

你可以在那个文件中看到更远的地方 here它分配 fn[SRC],特别是

if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));

如果您检查 TPL,在这种情况下它是 ["function ", "() { [native code] }"],所以当使用 调用时.join(String(key)) 你最终得到了

function race() { [native code] }

您在输出中看到的。

关于javascript - core-js/babel-polyfill polyfill 函数显示为 [native code],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42058945/

相关文章:

javascript - 显示嵌套的 JSON 数据

javascript - Firebase 数据库 startAt() 字符串参数长度限制?

javascript - cakephp onclick更改图像,放置id和函数调用

node.js - npm 在项目根目录安装包和依赖项

javascript - 使用精确参数调用的 Sinon js 检查 stub

将 ES6 转换为使用 Traceur 或 Babel 的 ES5 的 Maven 插件

javascript - 使用 React 添加类

javascript - 检查 .match() 结果是否不为空

ecmascript-6 - Istanbul如何忽略ES6的默认值分支(Babel编译为ES5)

javascript - 如何确保运行异步调用的 foreach 循环完成?