Frage

Bitte helfen Sie mir zu verstehen, warum die folgenden Code funktioniert:

<script>
    var re = RegExp('\\ba\\b') ;
    alert(re.test('a')) ;
    alert(re.test('ab')) ;
</script>

In der ersten Zeile gibt es keine new Betreiber.

Soweit ich weiß, ein contructor in JavaScript ist eine Funktion, die initialize erstellt von Objekten der Betreiber new und sie sind nicht auf Rückkehr nichts bedeuten.

War es hilfreich?

Lösung

In der Regel, wenn etwas als eine Konstruktor Verwendung new damit dokumentiert. Aber in diesem Fall hat RegExp ein definierte „Fabrik“ Verhalten für den Fall, dass Sie es als eine Funktion stattdessen genannt habe. Siehe Abschnitt 15.10.3 des ECMAScript (JavaScript) Spezifikation ( dass Links auf die abgehende spec, die Abschnittsnummer ist das gleiche in der neuen Spezifikation, die Sie von der ECMA Front herunterladen [auf der rechten Seite]; ich will nicht direkt Link zu einer ~ 4 MB PDF-Datei):

  

15.10.3 Die RegExp Constructor als eine Funktion namens
   15.10.3.1 RegExp (Muster, Fahnen)
  Wenn Muster ein Objekt R, das [[Klasse]] Eigenschaft ist „RegExp“ und Flaggen nicht definiert ist, dann zurück R unverändert. Andernfalls der RegExp Konstruktor aufrufen (15.10.4.1), ist es die Muster und Fahnen Argumente zu übergeben und das Objekt zurück von diesem Konstruktor konstruiert.

Sie können Ihre eigenen JavaScript Konstruktorfunktionen tatsächlich definieren, damit das new Schlüsselwort Weglassen (durch den Nachweis haben sie als Funktion stattdessen aufgerufen wurde, und sich umzudrehen und sich richtig fordern), aber ich würde vorschlagen, es nicht wie es führt In dem Code irreführend.

Andere Tipps

1 TJ Crowder hat. Der ECMAScript-Standard geht von seinem Weg Verhaltensweisen für die Einbau-Konstruktor Funktionen zu definieren, wenn du als Ebene-Funktionen aufgerufen. Oft einfach es nennt sich wieder als Konstrukteur, aber es gibt einige kompliziertere Fälle.

  

Konstrukteuren in Javascript [...] sind nicht auf Rückkehr etwas gemeint

Im Allgemeinen ist ein Konstruktor können this ignorieren und nur ein unabhängiges Objekt zurückgeben:

function Thing() {
    return {'foo': 1};
}

In diesem Fall können Sie ebenso die Funktion als Konstruktor (mit new) oder einer reinen Funktion.

Wenn der Konstruktor gibt nichts zurück, als das übliche Muster für Konstrukteure ist, sorgt der new Betreiber selbst, dass es das neue Objekt kehrt als this erstellt und weitergegeben. In diesem Fall müssen Sie new verwenden.

Es ist am besten nicht auf einem Konstruktor als bloße Funktion arbeiten zu verlassen, und die alternativen Verhaltensweisen des integrierte Konstruktoren selten von Nutzen sind, so im Allgemeinen sollten Sie mit new bleiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top