Sollte die Erweiterung von integrierten Javascript-Prototypen durch Symbole vermieden werden?

8

Es ist die vorherrschende Meinung , die eingebaut wird Javascript-Prototypen sollten nicht erweitert (oder in irgendeiner Weise verändert) werden:

%Vor%

Gilt diese Regel auch für ES2015-Symbole?

%Vor%

Da symbol eine Mischung aus string (primitiv, unveränderlich) und object (Identität) ist, kann es keine Namenskonflikte für Objekteigenschaften geben.

Die normale Objektreflexion wird nicht von Symbolen beeinflusst:

%Vor%

Aber ES2015 Reflexion mit Reflect.ownKeys(Array.prototype) ist.

Bei dieser Frage geht es hauptsächlich darum, wie wir in Zukunft Reflect.ownKeys und Object.getOwnPropertySymbols verwenden werden.

    
rand 12.01.2016, 17:03
quelle

1 Antwort

2

Ja.

Die Regel "Modifiziere nicht etwas, das du nicht besitzt" besteht aus zwei Teilen:

  1. Sie können Namenskollisionen verursachen, und Sie können ihren Code trennen.

    Wenn Sie etwas berühren, das Ihnen nicht gehört, können Sie versehentlich etwas überschreiben, das von einer anderen Bibliothek verwendet wird. Dies wird ihren Code auf unerwartete Weise brechen.

  2. Sie können enge Abhängigkeiten erstellen und sie können Ihren Code auflösen.

    Wenn Sie Ihren Code so eng an ein anderes Objekt binden, dass er einige wichtige Änderungen vornimmt (z. B. Entfernen oder Umbenennen der Klasse), kann Ihr Code plötzlich beschädigt werden.

Mit Symbolen vermeiden Sie # 1, aber Sie stoßen immer noch auf # 2. Enge Abhängigkeiten zwischen solchen Klassen werden im Allgemeinen vermieden. Wenn die andere Klasse jemals eingefroren ist, bleibt Ihr Code erhalten Unterbrechung. Die Antworten auf diese Frage gilt immer noch, nur aus leicht unterschiedlichen Gründen.

Sie möchten sich auf lose Bindung Ihrer Abhängigkeiten konzentrieren, um bessere Tests zu unterstützen (lose Bindungen sind leichter nachzuahmen) und einfacher Wartung (einige offensichtliche Verbindungen sind einfacher zu dokumentieren und zu aktualisieren).

Um es klar zu machen: Die Namenskollisionen sind nur ein Symptom für die Probleme, die durch eng verbundene Abhängigkeiten verursacht werden.

    
ssube 12.01.2016, 17:08
quelle