Heim Web-Frontend js-Tutorial Lassen Sie uns über die Gedanken über Getter und Setter sprechen, die durch Vue.js verursacht werden

Lassen Sie uns über die Gedanken über Getter und Setter sprechen, die durch Vue.js verursacht werden

Jan 03, 2017 pm 05:01 PM

Ursache

Als ich die Attribute im Datenobjekt unter der Vue-Instanz ausdruckte, fand ich etwas Interessantes:

Jedes seiner Attribute Es gibt zwei Ich hielt dies für unnötig, also habe ich das Implementierungsprinzip der bidirektionalen Bindung von Vue überprüft und festgestellt, dass es sich völlig vom Implementierungsprinzip der bidirektionalen Bindung von Angular.j unterscheidet Es nutzt die Datenverunreinigungserkennung. Wenn sich das Modell ändert, erkennt es, ob alle Ansichten an relevante Daten gebunden sind, und ändert dann die Ansichten. Das von Vue verwendete Publish-Subscribe-Modell ist eine Punkt-zu-Punkt-Datenbindung.

Vues Datenbindung besteht nur aus zwei Schritten: kompilieren=>link.

Ich habe darüber nachgedacht, wie Vue Benutzeränderungen am Modell überwacht. Erst als ich entdeckte, dass jedes Attribut in den Daten von Vue Set- und Get-Attribute hat, habe ich verstanden.

Normalerweise erstellen wir ein Objekt und ändern seine Eigenschaften wie folgt:

var obj = {
 val:99
}
obj.val = 100;
console.log(obj.val)//100
Nach dem Login kopieren

Es gibt kein Problem, aber Wenn Sie wurden gebeten, zu überwachen und etwas zu tun, wenn ich die Eigenschaften dieses Objekts ändere. Was würden Sie tun?

Verwandte Gedanken

Dies erfordert die Verwendung von Gettern und Settern.

Angenommen, ich möchte einem Codiererobjekt ein Namensattribut hinzufügen und muss jedes Mal, wenn ich das Namensattribut aktualisiere, etwas vervollständigen. Wir können Folgendes tun:

var Coder = function() {
 var that = this;
 return {
  get name(){
   if(that.name){
    return that.name
   }
   return '你还没有取名'
  },
  set name(val){
   console.log('你把名字修成了'+val)
   that.name = val
  }
 }
}
var isMe = new Coder()
console.log(isMe.name)
isMe.name = '周神'
console.log(isMe.name)
console.log(isMe)
Nach dem Login kopieren

Ausgabe:

Sie werden feststellen, dass der gedruckte Effekt dieses Objekts derselbe ist wie der des Datenobjekts in Vue oben, beide haben das gleiche Get- und Set-Eigenschaften.

Lassen Sie uns den obigen Code Schritt für Schritt analysieren, er ist sehr interessant.

Wir erstellen zuerst ein Objektliteral:

var Coder = function() {...}
Nach dem Login kopieren

Dann zwischenspeichern wir dies:

var that = this;
Nach dem Login kopieren

Das nächste, was am wichtigsten ist, wir geben ein Objekt zurück:

{
 
  get name(){...},
 
  set name(val){...}
 
}
Nach dem Login kopieren

Wie der Name schon sagt, erhalten Sie For Werterfassung, Set dient zur Zuweisung. Unter normalen Umständen verwenden wir obj.prop zur Werterfassung und -zuweisung, aber es gibt ein Problem damit. Woher weiß ich, dass sich der Wert des Objekts geändert hat? Es ist also an der Reihe, dass das Set erscheint.

Sie können get und set als Funktionen verstehen. Sie können sie natürlich nur auf diese Weise verstehen.

Als nächstes erstellen Sie eine Instanz des Codierers, isMe; zu diesem Zeitpunkt hat isMe kein Namensattribut. Wenn wir isMe.name aufrufen, geben wir zuerst get name(){...} ein Bestimmen Sie, ob isMe ein Namensattribut hat. Wenn die Antwort Nein ist, fügen Sie ein Namensattribut hinzu und weisen Sie ihm einen Wert zu: „Sie haben noch keinen Namen angegeben.“ Wenn es ein Namensattribut gibt, geben Sie das Namensattribut zurück.

Nachdem Sie dies gesehen haben, müssen Sie wissen, wie man get verwendet. Ja, Sie können sich get als eine Funktion vorstellen, die einen Wert annimmt.

Ich denke, das wichtigere ist das Set-Attribut. Wenn ich der Instanz einen Wert zuweise:

isMe.name="周神"
Nach dem Login kopieren

Zu diesem Zeitpunkt , es wird der festgelegte Name( val){...} eingegeben; Der formale Parameter val ist der Wert, den ich dem Namensattribut zugewiesen habe. In dieser Funktion kann ich viele Dinge tun, wie zum Beispiel eine bidirektionale Bindung! Da jede Änderung dieses Werts durch Set erfolgen muss, kann er nicht mit anderen Methoden geändert werden, was einem universellen Listener entspricht.

Es gibt eine andere Möglichkeit, diese Funktionalität zu erreichen.

Der Objektprototyp von ES5 verfügt über zwei neue Attribute __defineGetter__ und __defineSetter__, die speziell zum Binden von get und set an Objekte verwendet werden.

kann wie folgt geschrieben werden:

var Coder = function() {
}
Coder.prototype.__defineGetter__('name', function() {
 if (this.name) {
  return this.name
 }else{
  return '你还没有取名'
 }
})
Coder.prototype.__defineSetter__('name', function(val) {
 this.name = val
})
var isMe = new Coder()
console.log(isMe.name)
isMe.name = '周神'
console.log(isMe.name)
console.log(isMe)
Nach dem Login kopieren

Der Effekt ist derselbe. Es wird empfohlen, die folgende Methode zu verwenden, da dies der Fall ist auf dem Prototyp geschrieben, sodass es vererbt und wiederverwendet werden kann.

Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für alle beim Lernen oder bei der Arbeit hilfreich sein kann eine Botschaft zum Mitteilen.

Weitere Gedanken zu durch Vue.js verursachten Gettern und Settern finden Sie auf der chinesischen PHP-Website für verwandte Artikel!


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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Mar 18, 2025 pm 03:12 PM

In Artikel werden JavaScript -Bibliotheken erstellt, veröffentlicht und aufrechterhalten und konzentriert sich auf Planung, Entwicklung, Testen, Dokumentation und Werbestrategien.

Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Mar 18, 2025 pm 03:14 PM

In dem Artikel werden Strategien zur Optimierung der JavaScript -Leistung in Browsern erörtert, wobei der Schwerpunkt auf die Reduzierung der Ausführungszeit und die Minimierung der Auswirkungen auf die Lastgeschwindigkeit der Seite wird.

Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Apr 04, 2025 pm 02:42 PM

Häufig gestellte Fragen und Lösungen für das Ticket-Ticket-Ticket-Ticket in Front-End im Front-End-Entwicklungsdruck ist der Ticketdruck eine häufige Voraussetzung. Viele Entwickler implementieren jedoch ...

Wer bekommt mehr Python oder JavaScript bezahlt? Wer bekommt mehr Python oder JavaScript bezahlt? Apr 04, 2025 am 12:09 AM

Es gibt kein absolutes Gehalt für Python- und JavaScript -Entwickler, je nach Fähigkeiten und Branchenbedürfnissen. 1. Python kann mehr in Datenwissenschaft und maschinellem Lernen bezahlt werden. 2. JavaScript hat eine große Nachfrage in der Entwicklung von Front-End- und Full-Stack-Entwicklung, und sein Gehalt ist auch beträchtlich. 3. Einflussfaktoren umfassen Erfahrung, geografische Standort, Unternehmensgröße und spezifische Fähigkeiten.

Wie debugge ich den JavaScript -Code effektiv mithilfe von Browser -Entwickler -Tools? Wie debugge ich den JavaScript -Code effektiv mithilfe von Browser -Entwickler -Tools? Mar 18, 2025 pm 03:16 PM

In dem Artikel werden effektives JavaScript -Debuggen mithilfe von Browser -Entwickler -Tools, der Schwerpunkt auf dem Festlegen von Haltepunkten, der Konsole und der Analyse der Leistung erörtert.

Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Apr 04, 2025 pm 05:09 PM

Wie fusioniere ich Array -Elemente mit derselben ID in ein Objekt in JavaScript? Bei der Verarbeitung von Daten begegnen wir häufig die Notwendigkeit, dieselbe ID zu haben ...

Wie verwende ich Quellkarten zum Debuggen, um den JavaScript -Code zu debuggen? Wie verwende ich Quellkarten zum Debuggen, um den JavaScript -Code zu debuggen? Mar 18, 2025 pm 03:17 PM

In dem Artikel wird erläutert, wie Quellkarten zum Debuggen von JavaScript verwendet werden, indem er auf den ursprünglichen Code zurückgegeben wird. Es wird erläutert, dass Quellenkarten aktiviert, Breakpoints eingestellt und Tools wie Chrome Devtools und WebPack verwendet werden.

Entmystifizieren JavaScript: Was es tut und warum es wichtig ist Entmystifizieren JavaScript: Was es tut und warum es wichtig ist Apr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

See all articles