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