Schreiben von Methoden, die in nativem JS verboten sein sollten

Schreiben von Methoden, die in nativem JS verboten sein sollten

Funktionen auf Blockebene

Der strikte Modus sollte vor ES6 verboten werden. Verfügbar seit ES6. Der Gültigkeitsbereich einer Funktion ist der Block, in dem sie deklariert ist. Dies sollte im nicht strengen Modus deaktiviert werden.

wenn(wahr) {
    function test() { //Funktion auf Blockebene console.log(1);
    }
}
prüfen();

Ändern Sie direkt den Prototyp des Objekts

Der Browser optimiert den Prototyp und plant den Speicherplatz für die Methode des Objekts bereits vor dem Aufruf der Instanz. Daher kann der Prototyp nicht direkt verändert werden. Die folgenden zwei Methoden sollten verboten werden

Verwenden Sie Object.setPrototypeOf, um den Prototyp zu ändern

Funktion a(){}
a.prototyp = {
  a_prop: "ein Wert"
};
Funktion b(){}
var proto = {
  b_prop: "b-Wert"
};
Objekt.setPrototypeOf(
  proto, ein Prototyp
);
b.prototype = proto;
var test = neues b;
console.log(test.a_prop); // ein Wert
console.log(test.b_prop); // b Wert

Ändern Sie direkt das __proto__-Attribut des Objekts

Funktion a(){}
a.prototyp = {
  a_prop: "ein Wert"
};
Funktion b(){}
var proto = {
  b_prop: "b-Wert",
  __proto__: a.prototype //ändere direkt das __prototype__-Attribut von Objekt b};
b.prototype = proto;
var test = neues b;
console.log(test.a_prop); // ein Wert
console.log(test.b_prop); // b Wert

mit

Verwendung von mit:

var a = {
    p1: 1,
    Seite 2: 2
}
mit (a) {
    p1 = 3;
}
Konsole.log(a.p1);

Die Verwendung von „mit“ sollte verboten werden, zum Beispiel:

Funktion a(arg1, arg2) {
  mit (arg2){
    console.log(arg1); // Kann nicht bestimmen, ob der erste Parameter oder die arg1-Eigenschaft von arg2 ausgegeben werden soll}
}
var arg2 = {arg1:1}
a("arg1", arg2)

Angerufener

arguments.callee stellt die aktuell ausgeführte Funktion dar:

Funktion a(arg1) {
    wenn (arg1 > 1) {
        returniere arg1 * Argumente.callee(arg1 - 1);
    }
    anders {
        Rückgabe 1;
    }
}
konsole.log(a(3)); // 6

Wenn eine Funktion sich selbst aufrufen muss, verwenden Sie stattdessen arguments.callee() und rufen Sie die Funktion direkt mit ihrem Namen auf.

Funktion a(arg1) {
    wenn (arg1 > 1) {
        return arg1 * a(arg1 - 1); // Direkter Aufruf über den Funktionsnamen}
    anders {
        Rückgabe 1;
    }
}
konsole.log(a(3)); // 6

Anrufer

caller stellt den Aufrufer der Funktion dar und sollte nicht verwendet werden. Diese Funktion ist nicht Standard.

Funktion a() {
    console.log(a.caller); // Funktion b() { a(); }
}
Funktion b() {
    A();
}
B();

Auswertung

eval() kann den übergebenen String-Parameter als JavaScript-Code ausführen.

eval("var a = 1, b = 2; console.log(a+b)"); // 3

Die Verwendung von eval ist verboten. Eval ist langsamer als die normale JavaScript-Ausführung, da Browser JavaScript optimieren. Die eval-Methode ist außerdem unsicher, da sie Code mit denselben Berechtigungen wie der Anrufer ausführt und ihr Gültigkeitsbereich beim Aufruf von eval() offengelegt wird. Stattdessen sollte die Funktion verwendet werden:

var a = neue Funktion("a", "b", "console.log(a+b)")
ein(1,2); // 3

Oben finden Sie detaillierte Informationen zu Schreibmethoden, die in nativem JS verboten werden sollten. Weitere Informationen zu Schreibmethoden, die in nativem JS verboten werden sollten, finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So schreiben Sie speichereffiziente Anwendungen mit Node.js
  • Eine kurze Diskussion über die Ausführungseffizienz von regulären JS-Literalen // und neuen RegExp
  • JavaScript prüft die Effizienz der Codeausführung durch die Verwendung von console.time() und console.timeEnd()
  • So verbessern Sie die Lade- und Ausführungseffizienz von JavaScript
  • Mehrere Möglichkeiten zum Schreiben von For-Schleifen in JavaScript und ihre Effizienzübersicht
  • Effizienztest verschiedener Methoden zur Deduplizierung von JavaScript-Arrays
  • So entfernen Sie effizient doppelte Elemente in einem JS-Array
  • Detaillierte Untersuchung der Effizienzprobleme und der damit verbundenen Optimierungen von For-Schleifen in JavaScript
  • Drei Methoden zur Bestimmung, ob JavaScript ein Array ist, und ihr Effizienzvergleich

<<:  So beheben Sie den MySQL-FEHLER 1045 (28000) - Zugriff wegen Benutzer verweigert

>>:  Nginx-Konfiguration domänenübergreifende Anforderung Access-Control-Allow-Origin * detaillierte Erklärung

Artikel empfehlen

Codebeispiel für die Implementierung des Linux-Verzeichniswechsels

Das Wechseln von Dateien ist eine gängige Operati...

Einige Tipps zur Verwendung von Less in Vue-Projekten

Inhaltsverzeichnis Vorwort 1. Stildurchdringung 1...

Was Sie beim Schreiben selbstschließender XHTML-Tags beachten sollten

Das img-Tag in XHTML ist ein sogenanntes selbstsc...

Ein super detailliertes Vue-Router Schritt-für-Schritt-Tutorial

Inhaltsverzeichnis 1. Router-Ansicht 2. Router-Ve...

js zur Realisierung eines Web-Musikplayers

Dieser Artikel enthält einfachen HTML- und Musikp...

Wie CSS die Zeit des weißen Bildschirms während des ersten Ladens beeinflusst

Rendering-Pipeline mit externen CSS-Dateien In de...

Analyse des Prinzips und der Erstellungsmethode der temporären MySQL-Tabelle

In diesem Artikel werden hauptsächlich das Prinzi...

Beispiel zum Erstellen eines öffentlichen Harbor-Repository mit Docker

Im vorherigen Blogbeitrag ging es um das private ...

Linux verwendet if, um zu bestimmen, ob ein Verzeichnis existiert.

So verwenden Sie „if“ in Linux, um festzustellen,...

Vue realisiert die Funktion eines Bucheinkaufswagens

In diesem Artikelbeispiel wird der spezifische Co...

Implementierung von Nginx-Weiterleitungsübereinstimmungsregeln

1. Regulärer Ausdrucksabgleich ~ für Groß- und Kl...

Ubuntu16.04 erstellt eine php5.6-Webserverumgebung

Ubuntu 16.04 installiert standardmäßig die PHP7.0...