假设我有一个正常的函数:
function coolsecretalgo() {
return 42;
}
我很难通过使用以下功能来隐藏它的代码:
function hide(fname) {
var fn=self[fname]
Object.defineProperty(fn,"toString",{"value": ()=>fname+"() { [native code] }"})
Object.defineProperty(fn.toString,"toString",{"value": ()=>"toString() { [native code] }"})
Object.defineProperty(fn.toString.toString,"toString",{"value": fn.toString.toString})
}
有没有办法取消隐藏这样的隐藏功能?
hide("coolsecretalgo")
undefined
coolsecretalgo
ƒ coolsecretalgo() { [native code] }
coolsecretalgo.toString
ƒ toString() { [native code] }
coolsecretalgo.toString.toString
ƒ toString() { [native code] }
coolsecretalgo.toString.toString.toString
ƒ toString() { [native code] }
有更好的方法吗?
我的意思是:有可能写一个像这样的函数吗
function unhide(funcname) {
...some code..
}
然后
unhide("coolsecretalgo")
并取回原始代码?
如果您可以连接字符串并通过eval()
运行它,那么就可以了。这不是保险箱的选择,但我不推荐它。