In meinem Verständnis davon ging es immer nur darum, es zu benutzen und zu wissen, aber ich habe mich nicht mit seiner Essenz befasst. Dieses Mal habe ich ein tiefes Verständnis mit "JavaScript the Good Teile". (Alle Debugging sind in der Konsole, Browser F12 -Taste zu sehen)
Schauen wir uns das gemeinsam an.
Wenn wir eine Funktion deklarieren, hat jede Funktion zwei zusätzliche Parameter (formale Parameter) definiert, eine ist dies und die andere sind Argumente. Argumente sind die von der Funktion tatsächlich akzeptierten Parameter und sind eine Reihe von Klassen. Ich werde nur eine kurze Einführung in Argumente geben, und wir werden uns auf diesen Zeiger konzentrieren.
In der objektorientierten Transformation ist dies sehr wichtig, und sein Wert hängt vom Muster des Aufrufs ab. In JavaScript gibt es insgesamt 4 Aufrufmuster: Methodenaufrufmuster, Funktionsaufrufmuster, Konstruktoraufrufmuster und Anwenden von Aufrufmustern.
Methodenaufrufmodus
Wenn eine Funktion ein Attribut als Objekt ist, nennen wir diese Funktion normalerweise eine Methode dieses Objekts. Wenn diese Methode aufgerufen wird, weist dies auf das Objekt hin, zu dem die Methode gehört.
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
var people = {
Name: "Yika",
SayName: function () {
console.log (this.name); // "Yika"
// Dies wurde an das Volksobjekt gebunden
}
}
people.sayname ();
</script>
Wie von Chestnut gezeigt, weist dies auf das SayName -Objekt hin. Diese Methode, um den Kontext des Objekts durch diese zu erhalten, ist eine öffentliche Methode. (Veröffentlichungsmethode)
Funktionsaufrufmodus
Wenn eine Funktion aufgerufen wird, ist sie keine Methode für ein Objekt, sie wird als Funktion aufgerufen.
Dieser Musteraufruf zeigt auf das Fensterobjekt, auch wenn diese Funktion in einer externen Funktion aufgerufen werden kann, schauen wir es uns an.
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
var name = "window-yika";
var people = {
Name: "People-Yika",
Schüler: function () {
console.log (this); // Dies bindet die Objektleute hier
Funktion SaysName () {
var name = "sayname-yika";
console.log (this.name); // Window-Yika
// Auch wenn die SayName -Funktion selbst und das Personenobjekt, das sich befindet, einen Namenswert haben, weist dies auf das Fenster hin
};
SayName ();
}
}
people.student ();
</script>
Aus dieser Perspektive wissen Sie, wie Sie den JavaScript -Entwurfsfehler lösen können?
Ja, von der Schülerfunktion, dh, zeile 6. Dann übertragen Sie dies in die Funktion SayName über die Variablen, um sie zu lösen!
Die Codekopie lautet wie folgt:
var people = {
Name: "People-Yika",
Schüler: function () {
var self = this; // DIESES
Funktion SaysName () {
var name = "sayname-yika";
console.log (self.name); // "People-yika", zu dieser Zeit, zeigt sich selbst auf das Volksobjekt
};
SayName ();
}
}
Konstruktor -Anrufmodus
Wenn JavaScript über Konstrukteure spricht, werden Sie denken: "Der Funktionsname wird aktiviert! Verwenden Sie den neuen Betreiber beim Anruf!" Die Kapitalisierung der Funktionsnamen ist leicht zu verstehen, um die Benennung des Konstruktors zu standardisieren. Aber haben Sie sich jemals befasst, warum Sie neu verwenden müssen? Wenn Sie eine neue Funktion mit neuer Funktion aufrufen, erstellt der Funktionshintergrund ein neues Objekt, das auf den Funktionsprototyp zeigt, und dies ist auch an das neue Objekt gebunden. JavaScript ist eine Sprache, die auf Prototyp -Vererbung basiert. Schüler, die sich nicht sehr über Prototypprototypen hinweisen, können die Informationen selbst überprüfen. Ich konzentriere mich darauf.
Schauen wir uns zuerst an, wie der Konstruktor im Allgemeinen aussieht.
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
Funktion people (name) {
this.name = name; // Dies zeigt hier auf das neue Objekt Yika, nachdem Sie es mit neu angerufen haben
this.sayname = function () {
console.log (this.name); //Ausgabe
}
}
var yika = neue Leute ("yika");
Yika.sayname (); // Ausgabe "yika", weil Yika durch einen neuen Anruf erhalten wird, ist dies an das Yika -Objekt gebunden.
</script>
Auf den ersten Blick scheint es nicht leicht zu verstehen. Warum zeigte sich dieser Zeitfenster in der Funktion gerade und jetzt können Sie darauf hinweisen, dass die Personen ohne Cache funktionieren?
Es spielt keine Rolle. Haben Sie nicht nur gesagt, dass die Funktion "Mach schlechte Dinge" heimlich tun wird, indem sie neu anruft? Mal sehen, was genau du getan hast.
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
Funktion people (name) {
var das = {}; // Schlechtes Ding: Erstellen Sie ein Objekt selbst
that.name = name;
that.sayname = function () {
console.log (this.name);
};
gib das zurück; // Bad Thing 2, Sie werden das Verhalten der Rückkehr ändern, das gerade generierte Objekt zurückgeben
}
var yika = people ("yika"); // Neu kann hier weggelassen werden und den Anruf an den neuen Bediener nachahmt
Yika.sayname (); // Ausgabe "yika" wie gerade jetzt
</script>
Sie können so deutlich sehen. Neu erzeugt nicht nur ein Objekt, sondern gibt das Objekt auch automatisch zurück, so dass dies natürlich auf dieses neue Objekt hinweist.
Denken Sie daran, den Konstruktor neu zu nennen. Andernfalls wird es keine Warnung geben, wenn etwas schief geht, und alle Kapitalvereinbarungen sind nach wie vor sehr notwendig.
Anrufmodus anwenden
Mit der Anwendenmethode können wir ein Array von Parametern erstellen, die an die Aufruffunktion übergeben wurden, sodass wir diesen Wert ändern können.
Funktion.Apply (dieser gebundene Wert, Argumente Parameter -Array)
Es gibt so viele Dinge, die ich sagen kann, ich werde Ihnen hier nur eine Kastanie geben, um Ihnen zu helfen, zu verstehen:
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
Funktion people (name) {
this.name = name;
this.sayname = function () {
console.log (this.name); // Sayname -Methode gehört zum People Constructor
}
}
Funktion Student (Name) {
People.Apply (dies, Argumente); // Die Integrationsmethode zur Ausleihekonstruktoren besteht darin, People -Konstruktoren aufzurufen, indem sie sich im Studentenkonstruktor bewerben und diesen Wert von Menschen ändern
// Auf diese Weise wird jedes Mal, wenn eine Studenteninstanz erstellt wird, der People -Konstruktor aufgerufen
}
var student = neuer Schüler ("yika");
student.sayname (); // Ausgabe "Yika"
</script>
Wir können die Funktion dieses Bindungsobjekts durch Anwenden leicht ändern. Call ähnlich dem Anwendung hat auch den gleichen Effekt. Interessierte Schüler können es selbst suchen und lernen.
Okay, schließlich haben wir die vier Anrufmodi davon geändert. Der Methodenaufrufmodus und der Konstruktor -Aufrufmodus werden mehr verwendet und ist wichtiger. Für den Funktionsaufrufmodus müssen wir lernen, die darin enthaltenen Fallen zu vermeiden.
Wenn es einen Fehler gibt, melden Sie es bitte rechtzeitig und ich werde es so schnell wie möglich korrigieren, um die irreführenden anderen zu verhindern. Danke schön!