示例:
function f(a){ return a }
var g = f.bind(null);
g.toString() // chrome: function () { [native code] }
// firefox: function bound f() { [native code] }
为什么g.toString()
没有返回原始源代码会有一些微妙的原因吗?
当然,我可以通过覆盖Function.prototype.bind
来轻松“修复”这个问题,但我的问题是:我是否做了一些愚蠢的事情,比如打开一些安全漏洞?
var o_bind = Function.prototype.bind;
Function.prototype.bind = function(){
var f = o_bind.apply(this, arguments);
f.orig_func = this;
return f;
}
function fsrc(f){
return f.orig_func ?
String(f.orig_func).replace(/^function/, '$& bound') :
String(f);
}
答案 0 :(得分:2)
The spec says about Function.protoype.toString
(强调我的):
如果 func 是绑定函数异域对象,则为 返回 func 的依赖于实现的String源代码表示。表示必须符合以下规则。 表示是否包含绑定的函数信息或有关目标函数的信息,这取决于实现。
换句话说,环境可以自由地包含原始功能的来源。
我正在做一些愚蠢的事情,比如打开一些安全漏洞吗?
鉴于toString
返回函数的" normal"的源代码。用户定义的函数,可能不是。