Sicherheit ist ein Thema, das nicht leicht genommen werden sollte. Anfänger können mit einigen dieser Sicherheitstechniken in nicht vertraut sein JavaScriptJavaScript es un lenguaje de programación que funciona en el lado del cliente y con el que las webs pueden ser más funcionales. Incorporación en código HTML El código JavaScript puede ser incrustado en las páginas HTML, para que adquieran funcionalidad. Existen varias opciones. Puede estar entre las etiquetas <SCRIPT> y </SCRIPT>, puede estar contenido en un archivo externo, puede ser un parámetro de las etiquetas HTML, y puede estar Plus, e incluso uno que otro ProgrammiererConcepto de Programador¿Qué es un Programador?Un Programador es una persona, normalmente un profesional, que se encarga de escribir, de depurar y de revisar todo el código fuente de un software informático para que lleve a cabo determinadas tareas, o inclusive para que mejore, incorporando nuevas funciones para hacer que sea una herramienta más completa y eficiente.Además se le conoce como desarrollador de software, expresión que encaja estupendamente con su tarea Plus experimentado puede que también ignore estas prácticas. Sin embargo, mas allá de la importancia de conocer estos métodos es praticarlos día a día en nuestra ProgrammierungConcepto de Programación¿Qué es la Programación?La Programación es el procedimiento al que se recurre para crear algún tipo de aplicación o software, para materializar un concepto o proyecto que requiere de la utilización de un lenguaje informático para poder llevarse a cabo. Es algo que está absolutamente ligado a la figura del programador, y que cada vez está cobrando más relevancia dentro del mundo del marketing.Decimos que tanto esta figura Plus.

Projekteigenschaften wurden traditionell in JavaScript ungeschützt gelassen oder ausgeblendet und in einem Abschluss erfasst. Symbole und WeakMaps bieten eine weitere Alternative.

Sowohl Chrome (Version 36) als auch Firefox (Version 31) unterstützen WeakMaps. Chrome 36 unterstützt Symbole, Sie müssen jedoch experimentelles JavaScript in aktivieren chrome://flags/#enable-javascript-harmony. Firefox unterstützt Symbole der Version 33.

Ungeschütztes Szenario

Instanzen der Person Mit der folgenden Funktion erstellt, werden Eigenschaften direkt darin gespeichert.

var Person = (function () {function Person (name) {this.name = name;} Person.prototype.getName = function () {return this.name;}; return Person;} ()); var p = neue Person ('John'); print ('Name von Person 1:' + p.getName ()); p.name löschen; print ('Name von Person 1:' + p.getName () + '- außerhalb geändert.');

Dieser Ansatz hat den Vorteil, dass alle Instanzen der Person Sie sind ähnlich und der Zugriff auf die Eigenschaften dieser Instanzen kann optimiert werden. Andererseits gibt es hier keine privaten Immobilien - Alle Objekteigenschaften können geändert werden durch externen Code (in diesem Fall - gelöscht).

Einige Bibliotheken bevorzugen es, Eigenschaften, die privat sein sollen, den Unterstrich voranzustellen (z. B. _Name).

Andere - als TypeScript - dependen del CompilerUn compilador es un programa que traduce código fuente escrito en un lenguaje de alto nivel como Java, a un lenguaje legible por la máquina llamado código objeto, lenguaje de destino o inclusive lenguaje ensamblador. De este modo, un compilador podría llamarse traductor, pero sus tareas son más amplias porque, como parte de la compilación del programa, además informa de errores al leer el código. Cómo funciona Un compilador siempre Plus para marcar todos los usos ilegales de una propiedad privada.

Eigenschaften mit Verschlüssen ausblenden

Um eine Eigenschaft von einer externen Änderung zu isolieren, können Sie einen internen Abschluss verwenden, der über dem Fenster geschlossen wird Variablennamen. Die Douglas Crockford-Codekonventionen für JavaScript empfehlen dieses Muster, wenn der Datenschutz wichtig ist, um die Eigenschaften von Namen mit dem Unterstrichpräfix zu bestimmen, um den Datenschutz anzuzeigen.

var Person = (function () {function Person (name) {this.getName = function () {return name;};} return person;} ()); var p = neue Person ('John'); print ('Name von Person 2:' + p.getName ()); p.name löschen; print ('Name von Person 2:' + p.getName () + 'bleibt privat.');

Der Abschlussansatz hat den Vorteil einer echten Privatsphäre, aber die Kosten bestehen darin, dass für jede Instanz einer Person ein neuer Abschluss erstellt werden muss (die Funktion innerhalb des Konstruktors des Person).

Verwendung von Symbolen

Mit ES6 gibt es noch eine Möglichkeit, Eigenschaften zu speichern: Symbole.

Symbole ähneln privaten Namen, bieten jedoch im Gegensatz zu privaten Namen keine echte Privatsphäre.

Para ejecutar el ejemplo que ves tu BrowserUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los Plus debe soportar:

var Person = (function () {var nameSymbol = Symbol ('name'); function Person (name) {this [nameSymbol] = name;} Person.prototype.getName = function () {return this [nameSymbol];}; return Person;} ()); var p = neue Person ('John'); print ('Name von Person 3:' + p.getName ()); p.name löschen; print ('Name von Person 3:' + p.getName () + '- bleibt privat.'); print ('Eigenschaften von Person 3:' + Object.getOwnPropertyNames (p));

Symbole erhöhen nicht die Anzahl der Abschlüsse für jede erstellte Instanz. Es gibt nur einen Verschluss, um das Symbol zu schützen.

Symbole werden zum Indizieren von JavaScript-Objekten verwendet. Der Hauptunterschied zu anderen Typen besteht darin, dass sie nicht in Zeichenfolgen konvertiert und von verfügbar gemacht werden Object.getOwnPropertyNames. Nur mit dem Referenzsymbol können Sie Werte für das Objekt festlegen und abrufen. Mit der Funktion kann auf eine Liste von Symbolen zugegriffen werden, die einem bestimmten Objekt zugewiesen sind Object.getOwnPropertySymbols.

Jedes Symbol ist einzigartig, auch wenn es mit derselben Bezeichnung erstellt wurde.

ES6-Symbole ✅

var sym1 = Symbol ('a'); var sym2 = Symbol ('b'); var sym3 = Symbol ('a'); print ('sym1 === sym1:' + (sym1 === sym1)); print ('sym1 === sym2:' + (sym1 === sym2)); print ('sym1 === sym3:' + (sym1 === sym3));

Symbole haben folgende Nachteile:

  • Höhere Komplexität bei der Handhabung von Symbolen - Anstelle eines einfachen p.-Namens müssen Sie zuerst die Symbolreferenz abrufen und dann verwenden p [nameSymbol].
  • Actualmente sólo unos pocos BrowserConcepto de Navegadores¿Qué son los Navegadores?Los Navegadores son herramientas informáticas que utilizamos para, normalmente, navegar por Internet y visitar cualquier página web, al mismo tiempo de para hacer otras tareas como ver documentos, observar vídeos o reproducir contenido multimedia de cualquier tipo. Son un tipo de software sencillamente usual y bastante utilizado hoy en día.Insistimos en que es algo que se utiliza con mucha frecuencia, puesto que moverse por Internet Plus soportan símbolos.
  • No garantizan una verdadera privacidad, pero pueden utilizarse para separar las propiedades públicas de las internas de los objetos. Es similar a cómo la mayoría de los lenguajes orientados a objetos permiten el acceso a propiedades privadas a través de la APIConcepto de API¿Qué es una API?Una API, siglas de Application Programming Interface o Interfaz de Programación de Apps, es un recopilatorio de código que se puede emplear para que varias apps se comuniquen entre ellas. Es algo que realiza una tarea equivalente a la interfaz de usuario al momento de promover la interacción entre persona y programa, solo que aplicado única y exclusivamente dentro del entorno del software.Aún cuando suene Plus de reflexión.

Private Symbole werden für ECMAScript weiterhin berücksichtigt, aber die richtige Implementierung, bei der Symbole niemals gefiltert werden, ist schwierig. Private Symbole werden bereits von der ES6-Spezifikation verwendet und intern in V8 implementiert.

Verwenden von WeakMaps

Ein weiterer Ansatz zum Speichern privater Immobilien ist WeakMaps.

Eine WeakMap-Instanz ist in einem Abschluss versteckt und wird durch Instanzen von indiziert Person. Kartenwerte sind Objekte, die private Daten enthalten.

var Person = (function () {var private = new WeakMap (); function Person (name) {var privateProperties = {name: name}; private.set (this, privateProperties);} Person.prototype.getName = function () {return private.get (this) .name;}; return Person;} ()); var p = neue Person ('John'); print ('Name von Person 4:' + p.getName ()); p.name löschen; print ('Name von Person 4:' + p.getName () + '- bleibt privat.'); print ('Eigenschaften von Person 4:' + Object.getOwnPropertyNames (p));

Es ist möglich, Map anstelle einer WeakMap oder sogar einiger Arrays zu verwenden, um diese Lösung nachzuahmen. Die Verwendung von WeakMap hat jedoch einen erheblichen Vorteil: Dadurch können Personeninstanzen mit Müll gesammelt werden.

Eine Karte oder eine Matrix enthält Objekte, die stark enthalten. Person Es ist ein Abschluss, der die private Variable erfasst - was auch eine starke Referenz ist. Der Garbage Collector kann ein Objekt erfassen, wenn nur schwache Verweise darauf vorhanden sind (oder wenn überhaupt keine Verweise vorhanden sind). Aufgrund der beiden starken Referenzen, solange die Funktion Person ist von den CG-Wurzeln aus erreichbar, dann ist jede jemals erstellte Personeninstanz erreichbar und kann daher nicht durch Müll gesammelt werden.

Die WeakMap hält die Schlüssel schwach und das macht sowohl die Personeninstanz als auch ihre privaten Daten für die Speicherbereinigung eines Objekts geeignet Person Der Rest der Anwendung verweist nicht mehr darauf.

Zugriff auf Eigenschaften anderer Instanzen

Alle vorgestellten Lösungen (mit Ausnahme der Verschlüsse) weisen ein interessantes Merkmal auf. Instanzen können auf private Eigenschaften anderer Instanzen zugreifen.

Das folgende Beispiel klassifiziert die Instanzen von Person mit ihren Namen. Die Funktion vergleichen mit verwendet die privaten Daten dieser und anderer Instanzen.

var Person = (function () {var private = new WeakMap (); function Person (name) {var privateProperties = {name: name}; private.set (this, privateProperties);} Person.prototype.compareTo = function (other ) {var thisName = private.get (this) .name; var otherName = private.get (other) .name; return thisName.localeCompare (otherName);}; Person.prototype.toString = function () {return private.get (this) .name;}; return Person;} ()); var people = [neue Person ('John'), neue Person ('Jane'), neue Person ('Jim')]; people.sort (Funktion (erste, zweite) {return first.compareTo (zweite);}); print ('Sortierte Personen:' + people.join (','));

Das gleiche Beispiel in Java geschrieben:

import java.util.Arrays; Klasse Person implementiert Vergleichbar {privater Stringname; öffentliche Person (String name) {this.name = name; } public int compareTo (Person other) {return this.name.compareTo (other.name); } public String toString () {return this.name; }} public class Main {public statisch final void main (String ... args) {Person [] people = neue Person [] {neue Person ("John"), neue Person ("Jane"), neue Person ("Jim" ")}; Arrays.sort (Personen); System.out.print ("Sortierte Personen:" + Arrays.toString (Personen)); }}

Die Methode Person :: compareTo Verwendet den privaten Feldnamen dieser Instanz und eines anderen Objekts.

Herzlichen Glückwunsch zum Abschluss dieses neuen Tutorials. Denken Sie daran, dass dies auf Ihrer Website der Fall ist schoolJavaScript.com tendrás acceso a los mejores cursos de ProgrammierspracheConcepto de Lenguaje de programación¿Qué es un Lenguaje de programación y qué significa?Un Lenguaje de programación es un recopilatorio de instrucciones y términos, un lenguaje formal, que se construye y se emplea para que un PC o un dispositivo pueda crear distintos tipos de datos. Por lo general, hablamos de él como el idioma que el programador habla con la máquina para crear un programa de cualquier tipo.Hay distintos clases Plus JavaScript.