Beispiel:Warum gibt bound_function.toString() den ursprünglichen Quellcode nicht zurück?
function f(a){ return a }
var g = f.bind(null);
g.toString() // chrome: function() { [native code] }
// firefox: function bound f() { [native code] }
Gibt es einen subtilen Grund, warum g.toString()
nicht, um den ursprünglichen Quellcode zurückkehrt?
Natürlich konnte ich das leicht beheben, indem ich Function.prototype.bind
überging, aber meine Frage ist: mache ich etwas dummes wie das Öffnen eines Sicherheitslochs mit diesem?
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);
}
Nun, '.bind' gibt eine neue Funktion zurück. –
@FelixKling, Sie sind richtig, aber 'f.toString()! = G.toString()' :) (die 'bind' gibt wahrscheinlich eine native Funktion zurück, die beim Aufruf den eigentlichen Aufruf der ursprünglichen Funktion mit dem relevanten' thisArg') – Dekel
@Dekel tatsächlich, dass _is_ was es tut. Eine vereinfachte Version von 'bind' besteht darin, einfach die folgende Funktion zurückzugeben: function() {return f.apply (thisArg, arguments); } '. Eine Vollversion ist nicht viel anders, würde aber die Teilzuweisungsfunktionalität handhaben. – vlaz