为什么bound_function.toString()没有返回原始源代码?

时间:2016-11-06 16:27:53

标签: javascript

示例:

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);
}

1 个答案:

答案 0 :(得分:2)

The spec says about Function.protoype.toString(强调我的):

  

如果 func 是绑定函数异域对象,则为   返回 func 的依赖于实现的String源代码表示。表示必须符合以下规则。 表示是否包含绑定的函数信息或有关目标函数的信息,这取决于实现。

换句话说,环境可以自由地包含原始功能的来源。

  我正在做一些愚蠢的事情,比如打开一些安全漏洞吗?

鉴于toString返回函数的" normal"的源代码。用户定义的函数,可能不是。