Gibt es einen Grund dafür, dass eine Funktion so aussieht, als wäre sie nativ?

9

In JavaScript können native Funktionen identifiziert werden, wenn sie in String umgewandelt werden, zum Beispiel:

%Vor%

Jede Funktion kann jedoch toString() überladen und so tun, als wäre sie nativ:

%Vor%

Ich habe den Quellcode von Zone.js durchgesehen und dieses Bit , das genau das tut (und per Entwurf, nach einem der Tests ):

%Vor%

Nun, ich frage nicht nach Spekulationen darüber, warum das Zone.js-Team sich speziell dafür entschieden hat (ich konnte keinen offiziellen Blogbeitrag / Erklärung finden), sondern:

  • Im Allgemeinen, wann möchten Sie das tun? Gibt es Vorteile dabei?

  • Gibt es Nebeneffekte, d. h. behandelt der JavaScript-Standard oder eine JavaScript-Engine diese Funktionen anders?

fstanis 31.01.2017, 15:58
quelle

1 Antwort

3

Der zu überprüfende Code ist spezifisch für Chrom-Engines und MS Edge.

%Vor%

In Firefox und Safari sieht die Zeichenfolgendarstellung der gleichen Funktion wie folgt aus:

%Vor%

In Internet Explorer ist die Zeichenfolgendarstellung ähnlich, außer dass am Anfang und am Ende der Zeichenfolge auch Zeilenumbrüche vorhanden sind.

Wenn also dieser Code eine native Funktion vortäuschen soll, macht es das zumindest nicht gut (oder ist es vielleicht Knoten-spezifisch?).

Mir sind keine praktischen Anwendungen dafür bekannt, außer über Browser hinweg zu portieren.

JSFuck

Ein sicherer Weg, um zu bestimmen, ob eine Funktion nativ ist, ist das Ergebnis von Function.prototype.toString.call(fn) (wobei fn die Funktion ist, die getestet wird) und nach der Zeichenfolge [native code] an der erwarteten Position zu suchen. Dies ist eine Invariante in allen Browsern, obwohl es, soweit ich weiß, nicht zu der Spezifikation geführt hat.

    
GOTO 0 31.01.2017, 16:16
quelle

Tags und Links