1
例子:为什么bound_function.toString()不返回原始源代码?
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);
}
好,'.bind'返回一个新的功能。 –
@FelixKling,你是正确的,但'f.toString()!= g.toString()':)(在'bind'可能返回本地函数调用时不与相关'原函数的实际调用thisArg') – Dekel
@Dekel确实,这是_is_它做什么。 bind的简化版本就是返回下面的'function(){return f.apply(thisArg,arguments); }'。完整版本没有那么大的不同,但会处理部分分配功能。 – vlaz