使用 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-js
和 babel-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/