Heim > Web-Frontend > js-Tutorial > Wie flexibel ist JavaScript?

Wie flexibel ist JavaScript?

伊谢尔伦
Freigeben: 2016-11-24 09:44:00
Original
1026 Leute haben es durchsucht

JavaScript ist eine flexible Sprache und äußerst ausdrucksstark. Lassen Sie mich Ihnen ein Beispiel geben, das garantiert viele Menschen überraschen wird.

Dieser Artikel wurde von Kyle Simpsons Artikel „Iterating ES6 Numbers“ inspiriert.

Stellen Sie zunächst eine Add-Methode für das Number.prototype-Objekt bereit.

Number.prototype.add = function (x) {
  return this + x;
};
Nach dem Login kopieren

Der obige Code definiert eine Add-Methode für Number-Instanzen. (Wenn Sie mit dieser Schreibmethode nicht vertraut sind, wird empfohlen, zuerst meine „JavaScript-Objektorientierte Programmierung“ zu lesen.)

Da die Instanz von Number ein numerischer Wert ist, wird beim Aufruf einer Methode auf der numerischer Wert, der numerische Wert wird automatisch in ein Instanzobjekt konvertiert, sodass die folgenden Ergebnisse erzielt werden.

8['add'](2)
// 10
Nach dem Login kopieren

Im obigen Code wird die aufrufende Methode als 8['add'] statt als 8.add geschrieben, weil der Punkt nach dem Wert als Dezimalpunkt interpretiert wird ein Punktoperator.

Indem Sie den Wert in Klammern setzen, können Sie den Punktoperator verwenden, um die Methode aufzurufen.

(8).add(2)
// 10
Nach dem Login kopieren

Eigentlich gibt es eine andere Möglichkeit, es zu schreiben.

8..add(2)
// 10
Nach dem Login kopieren

Der erste Punkt im obigen Code wird als Dezimalpunkt und der zweite Punkt als Punktoperator interpretiert. Der semantischen Klarheit halber verwende ich im Folgenden Klammern.

Da die Add-Methode immer noch einen numerischen Wert zurückgibt, kann sie verkettet werden.

Number.prototype.subtract = function (x) {
  return this - x;
};
(8).add(2).subtract(4)
// 6
Nach dem Login kopieren

Der obige Code stellt die Subtract-Methode für die Instanz des Number-Objekts bereit, das in einer Kette mit der Add-Methode aufgerufen werden kann.

Wenn Sie zum Aufrufen von Attributen eckige Klammern verwenden, wird die Schreibweise seltsam.

8["add"](2)["subtract"](4)
// 6
Nach dem Login kopieren

Wir können auch komplexere Methoden einsetzen.

Number.prototype.iterate = function () {
  var result = [];
  for (var i = 0; i <= this; i++) {
    result.push(i);
  }
  return result;
};
(8).iterate()
// [0, 1, 2, 3, 4, 5, 6, 7, 8]
Nach dem Login kopieren

Der obige Code stellt die Iterate-Methode für den Prototyp des Number-Objekts bereit, mit der ein Wert automatisch in ein Array erweitert werden kann.

Kurz gesagt, wir können jetzt Methoden für Werte direkt aufrufen, aber das Klammerpaar hinten sieht etwas nervig aus. Ist es möglich, die Klammern zu entfernen? Mit anderen Worten: Kann der folgende Ausdruck

(8).double().square()
Nach dem Login kopieren

anders geschrieben werden?

(8).double.suqare
Nach dem Login kopieren

Es ist machbar.

ES5 legt fest, dass jedes Objektattribut über eine Wertmethode get verfügt, mit der der Lesevorgang des Attributs angepasst wird.

Number.prototype = Object.defineProperty(
  Number.prototype, "double", {
    get: function (){return (this + this)} 
  }
);
Number.prototype =  Object.defineProperty(
  Number.prototype, "square", {
    get: function (){return (this * this)} 
  }
);
Nach dem Login kopieren

Der obige Code definiert zwei Eigenschaften double und quadrat auf Number.prototype sowie deren Wertmethode get.

Daher kann das Lesen dieser beiden Attribute bei jedem Wert wie folgt geschrieben werden.

(8).double.square
// 256
Nach dem Login kopieren

Sie können stattdessen auch den eckigen Klammeroperator verwenden.

8["double"]["square"]
// 256
Nach dem Login kopieren


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