首页 > 解决方案 > 除了 toString() 之外,还有其他方法可以查看函数的主体吗

问题描述

我不希望第三方 JS 看到我公开的函数的代码,所以我覆盖了他们的 .toString 方法。

除了 toString 之外,还有其他方法可以公开函数代码吗?

谢谢!

标签: javascript

解决方案


自定义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 阶段,但预计最终会进入官方语言。


综上所述——这些技术可以让第三方代码更难看到你在做什么,但他们不能保证——毕竟,任何关心你的人都可以手动查看你的代码并查看这是怎么回事。


推荐阅读