javascript - 除了 toString() 之外,还有其他方法可以查看函数的主体吗
问题描述
我不希望第三方 JS 看到我公开的函数的代码,所以我覆盖了他们的 .toString 方法。
除了 toString 之外,还有其他方法可以公开函数代码吗?
谢谢!
解决方案
自定义toString
属性是不够的,因为Function.prototype.toString
可以在函数上调用:
function foo() {
console.log('foo implementation');
};
foo.toString = () => 'hidden';
console.log(Function.prototype.toString.call(foo));
目前,没有事先覆盖就没有办法完全隐藏实现,Function.prototype.toString
这样就没有任何东西可以引用并在以后调用它(这将是一个非常奇怪的解决方案),例如:
Function.prototype.toString = () => 'nope';
但即使这样在多领域环境中也不是万无一失的。
最终可能会有一种适当的方法来使用实现隐藏提案来做到这一点。它的语法类似于use strict
,除了它会阻止函数的外部使用者能够看到内部的任何内容。例如:
const y = () => {
"hide source";
// implement y here
// nothing outside will be able to see its source code (easily)
};
该提案仅处于第 2 阶段,但预计最终会进入官方语言。
综上所述——这些技术可以让第三方代码更难看到你在做什么,但他们不能保证——毕竟,任何关心你的人都可以手动查看你的代码并查看这是怎么回事。
推荐阅读
- react-native - 如何从 URL 下载图像并缓存 Android (React-Native)
- python - 分类线串的 GeoDataFrame 上的 Hvplot 无法绘制不同的颜色
- c# - Linq - 带有连接的选择语句内的值总和
- python - 如何检测Python中的输入?
- excel - 数据透视表 Excel 2016 - 2019
- elasticsearch - 两个弹性搜索查询合二为一
- windows - 为批处理文件中的单个命令打开 echo
- angular - 使用 AngularFire Auth 限制对 AngularFireDatabase 的访问
- javascript - 应用状态界面中的 NgRx 根状态键
- python - 间歇连接的队列大小和阻塞