Heim > Web-Frontend > js-Tutorial > Hauptteil

Tipps zum Erkennen, ob es sich bei einer Funktion um eine native JavaScript-Funktion handelt_javascript-Tipps

WBOY
Freigeben: 2016-05-16 16:09:57
Original
1053 Leute haben es durchsucht

Bei meiner Entwicklungsarbeit stoße ich häufig auf Situationen, in denen ich feststellen muss, ob es sich bei einer Funktion um eine native JavaScript-Funktion handelt. Manchmal ist dies eine sehr notwendige Aufgabe. Sie müssen wissen, ob die Funktion vom Browser selbst bereitgestellt wird Drittanbieter-Kapselung und Tarnung als native Funktionen. Am besten ist es natürlich, den Rückgabewert der toString-Methode zu untersuchen, die diese Funktion ausführt.

Das JavaScript

Der Weg, diese Aufgabe zu erledigen, ist sehr einfach:

Code kopieren Der Code lautet wie folgt:

Funktion isNative(fn) {
return (/{s*[native code]s*}/).test('' fn);
}

Die toString-Methode gibt die Zeichenfolgenform dieser Methode zurück und verwendet dann reguläre Ausdrücke, um die darin enthaltenen Zeichen zu bestimmen.

Eine leistungsfähigere Methode

Lodash-Gründer John-David Dalton hat eine bessere Lösung gefunden:

Code kopieren Der Code lautet wie folgt:

;(function() {

// Wird verwendet, um die interne „[[Klasse]]“ von Werten aufzulösen
var toString = Object.prototype.toString;

// Wird verwendet, um die dekompilierte Funktionsquelle aufzulösen
var fnToString = Function.prototype.toString;

// Wird zum Erkennen von Hostkonstruktoren verwendet (Safari > 4; wirklich typisiertes Array spezifisch)
var reHostCtor = /^[object ?Constructor]$/;

// Kompilieren Sie einen regulären Ausdruck mit einer gängigen nativen Methode als Vorlage.
// Wir haben „Object#toString“ gewählt, weil die Wahrscheinlichkeit groß ist, dass es nicht verfälscht wird.
var reNative = RegExp('^'
// „Object#toString“ in einen String umwandeln
String(toString)
// Alle speziellen regulären Ausdruckszeichen maskieren
.replace(/[.* ?^${}()|[]/\]/g, '\$&')
// Erwähnungen von „toString“ durch „.*?“ ersetzen, um die Vorlage generisch zu halten.
// Ersetzen Sie Dinge wie „für ...“, um Umgebungen wie Rhino zu unterstützen, die zusätzliche Informationen hinzufügen
// wie method arity.
.replace(/toString|(function).*?(?=\()| for . ?(?=\])/g, '$1.*?') '$'
);

Funktion isNative(value) {
var type = typeof value;
Rückgabetyp == 'function'
// „Function#toString“ verwenden, um die eigene „toString“-Methode des Werts zu umgehen
// und vermeiden Sie es, gefälscht zu werden.
​ ? reNative.test(fnToString.call(value))
// Fallback auf eine Host-Objektprüfung, da einige Umgebungen
darstellen // Dinge wie typisierte Arrays als DOM-Methoden, die möglicherweise nicht dem
entsprechen // normales natives Muster.
: (value && type == 'object' && reHostCtor.test(toString.call(value))) || false;
}

// exportieren, wie du willst
module.exports = isNative;
}());


Jetzt sehen Sie es, es ist komplex, aber mächtiger. Dies dient natürlich nicht der Sicherheit, sondern gibt Ihnen lediglich Auskunft darüber, ob es sich um eine native Funktion handelt.
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage