Vorwort
Die $.extend() in jQuery ist eine häufig verwendete Tool-Funktion, die hauptsächlich zum Zusammenführen von Parametern (Objekten) verwendet wird. Die spezifische Verwendung wird hier nicht beschrieben Der Zusammenführungsprozess erfolgt durch Übergabe von Parametern. Die neue Object.assign()-Methode in ES2015 kann auch eine Objektzusammenführung erreichen, aber dieser Artikel bezieht sich auf den Quellcode der Extend-Methode von jQuery Um die Objektzusammenführung selbst zu implementieren, werden die Attribute mehrerer Objekte auf das Zielobjekt kopiert. Wenn dieselben Attribute vorhanden sind, überschreiben die späteren Objekte die vorherigen.
Objektzusammenführung durch flaches Kopieren erreichen
In einem früheren Blogbeitrag wurde speziell das tiefe und flache Kopieren von Objekten und Arrays vorgestellt. Wenn Sie es nicht verstehen, lesen Sie es bitte hier. Schauen wir uns zuerst die Implementierung an und erklären wir dann
function extend() { //extend 浅拷贝实现 var name,options,copy, length = arguments.length, i = 1, target = arguments[0] || {}; //取目标对象 if(['object','function'].indexOf(typeof target) < 0){ target = {}; } for(;i<length;i++){ options = arguments[i] if(options != null){ //排除空参数的情况 extend({},,) for(name in options){ //遍历对象 赋值 copy = options[name]; if (copy !== undefined) { target[name] = copy; } } } } return target } //测试数据 var test1 = { a : 1, b : { c : 2, d : 3 }, e : [1,'a'] }, test2 = { b : { c : 4, d : 5, f : 6 }, e : [1,'a'], g : 7 } var test = extend({},test1,test2); console.log(test.b.d); //5 test2.b.d = 'x'; //修改test2 console.log(test.b.d); // 'x' test随之修改
Die Idee ist wie folgt:
1. Standardmäßig wird der erste Parameter als angenommen das Zielobjekt. Wenn der erste Parameter nicht vom Datentyp „Objekt“ ist, weisen Sie den Wert einem leeren Objekt zu
2. Durchlaufen Sie die verbleibenden Parameter (Quellobjekt) und kopieren Sie die Eigenschaften des Quellobjekts in das Zielobjekt .
3. Geben Sie das Zielobjekt als zusammengeführtes Ergebnis zurück
Im zweiten Schritt werden die Attributwerte des Quellobjekts nicht alle mit „=“ zugewiesen. Wenn also das Quellobjekt ein Objektattribut ist, wird nur der Referenzwert kopiert, bei dem es sich um eine flache Kopie handelt. Aus den Testergebnissen ist ersichtlich, dass die Attributwerte des b-Attributs von test und test2 sind verwenden dasselbe Objekt und beeinflussen sich gegenseitig. Nachdem Sie dies wissen, sollten Sie auch Ideen haben, wie Sie Deep Copy während der Zusammenführung implementieren können.
Deep-Copy-Methode zur Realisierung der Objektzusammenführung
Beim Kopieren des Quellobjektattributwerts müssen Sie den Typ des Werts bestimmen. Wenn es sich um einen Objektdatentyp handelt, rufen Sie die Erweiterungsfunktion rekursiv auf . Anschließend können Sie das Zusammenführen von Objekten im Deep-Copy-Modus üben. Die Implementierung lautet wie folgt:
function extend() { //extend 深拷贝实现 var name,options,src,copy, deep = false, //是否深拷贝 默认为false length = arguments.length, i = 1, target = arguments[0] || {}; //如果第一个参数为boolean类型,赋值给deep if(typeof target == 'boolean'){ deep = arguments[0]; target = arguments[i] || {}; //目标对象顺延 i++; } //如果target不是对象数据类型的话 target赋值为 {} if(['object','function'].indexOf(typeof target) < 0){ target = {}; } for(;i<length;i++){ options = arguments[i]; if(options != null){ for(name in options){ copy = options[name]; src = target[name]; if(target === copy){ //避免重复循环 continue; } if(deep && copy && (typeof copy == 'object')){ // 类型判断 src = Object.prototype.toString.call(copy) == '[object Array]' ? [] : {}; //区分数组和‘对象’ target[name] = extend(deep,src,copy); }else { if (copy !== undefined) { target[name] = copy; } } } } } return target }
1. Parameterbeurteilung: Wenn der erste Parameter ein boolescher Typ ist, Es wird verwendet, um zu steuern, ob die Parameter der tiefen Kopie standardmäßig falsch sind. Gleichzeitig ist das Zielelement der zweite Parameter
2. Beim Kopieren des Attributwerts müssen Sie bestimmen Typ des tiefen Parameters und Attributwerts; wenn tief wahr ist und der Attributwert ein Objekttyp ist, rufen Sie die Erweiterungsfunktion rekursiv auf, andernfalls weisen Sie den Wert direkt zu
3. Es ist notwendig, zwischen Arrays zu unterscheiden und „Objekte“, um den Eigenschaften des Zielobjekts unterschiedliche Anfangswerte zuzuweisen. Wenn sie alle {} sind, wird der in das Zielelement kopierte Array-Typ-Attributwert zu {'0':xx, '1': xx...}
Schlussfolgerung
Immer sie verwenden alle $.extend() direkt, aber ich bin mir über die Implementierung nicht ganz im Klaren. Ich* bin vielleicht nicht streng bei der Implementierung, aber ich habe das Gefühl, dass die Ernte gut ist.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Funktion zum Zusammenführen von Objekten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Dreamweaver CS6
Visuelle Webentwicklungstools

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software