


Eine kurze Diskussion über die Array.prototype.slice.call_javascript-Technik von Javascript
Vor dem Schreiben
In js sehen wir oft die Schreibmethode Array.prototype.slice.call(arguments,0). Natürlich kann jeder die Rolle dieser Methode verstehen, die darin besteht, ein Array-ähnliches Objekt in ein echtes Array umzuwandeln . Lassen Sie mich in Bezug auf diese Methode über mein Verständnis sprechen.
Dabei handelt es sich um die Methode „slice()“ und die Methode „call()“. Lassen Sie uns zunächst kurz auf diese beiden Methoden eingehen.
slice()-Methode
Arrays und Strings verfügen beide über diese Slice-Methode. Die Funktion dieser Methode besteht darin, ein Datenelement abzufangen. Der erste Parameter ist der abzufangende Positionsindex. Der zweite Parameter ist optional und gibt die abzufangende Endposition an. In einem Array ist der Rückgabewert dieser Methode ein Array, das die abgefangenen Elemente enthält. In einer Zeichenfolge ist der Rückgabewert dieser Methode eine Zeichenfolge, die die abgefangene Zeichenfolge enthält.
Diese Methode kann auch negative Werte übergeben. Wenn der Parameter eine negative Zahl ist, wird die positive Zahl, die durch Addition des Parameters und der Länge des Arrays oder Strings erhalten wird, als tatsächlicher Parameter verwendet.
lautet wie folgt:
[1,2,3,4,5,6].slice(2,4); [1,2,3,4,5,6].slice(-4,-2);
Die Rückgabewerte sind alle [3,4], bei denen es sich um Arrays handelt.
'everything'.slice(2,4); 'everything'.slice(-4,-2);
Die Rückgabewerte sind „er“ bzw. „hi“, bei denen es sich um Zeichenfolgen handelt.
Wenn ein Parameter übergeben wird, werden alle Elemente von der Startposition bis zur Endposition ausgegeben. Keine weiteren Beispiele.
Andere ähnliche Methoden für Strings
In Strings gibt es zwei weitere Methoden vom Typ Slice():
substring()- und substr()-Methoden.
Unter anderem bedeutet die Methode substring(), dass substr() zwei Parameter von der Startposition an die Endposition zurückgibt. Der erste Parameter gibt die Anzahl der Zeichen an abgefangen und Die ersten beiden Methoden unterscheiden sich geringfügig.
Wenn der an die Methode übergebene Parameter eine negative Zahl ist, unterscheiden sich diese drei Methoden geringfügig.
Wenn der an die Methode übergebene Parameter eine negative Zahl ist:
slice() addiert, wie oben erwähnt, die negative Zahl zur Länge der Zeichenfolge, um den entsprechenden positiven Wert zu erhalten;
Die Parameter der Methode substring() sind alle auf Null gesetzt;Der erste Parameter der substr()-Methode ist ein positiver Wert, der durch Addition des negativen Werts plus der Länge der Zeichenfolge erhalten wird, und der zweite Parameter wird auf Null gesetzt.
call()- und apply()-Methoden
Die Methoden call() und apply() werden hauptsächlich zur Erweiterung des Funktionsumfangs verwendet.
Die Methoden call() und apply() erhalten zwei Parameter:
apply(): Der erste Parameter ist der Bereich und der zweite das Parameterarray. Der zweite Parameter kann eine Array-Instanz oder ein Argumentobjekt sein.
Die Methode call() empfängt ebenfalls zwei Parameter, die Methode zum Übergeben von Parametern unterscheidet sich jedoch von apply(): Die Parameter der übergebenen Funktion müssen einzeln geschrieben werden.
Da dies nicht der Schwerpunkt ist, werde ich hier nicht auf Details eingehen.
Array.prototype.slice.call(arguments,0)In Array.prototype.slice.call(arguments,0) ruft Array.prototype.slice die Prototyp-Methode von Array auf. Für echte Arrays gibt es die Slice()-Methode, aber für Dinge wie Argumente oder self -definiert Obwohl einige Array-ähnliche Objekte mehrere Attribute wie die Länge haben, verfügen sie nicht über eine Slice()-Methode. Daher müssen Sie für solche Array-ähnlichen Objekte die Prototyp-Methode verwenden, um die Slice()-Methode zu verwenden ist, Array.prototype.slice (wenn in der Anpassung Die Slice()-Methode wird im Array-ähnlichen Objekt angepasst, sodass sie direkt aufgerufen werden kann).
Die Bedeutung von Array.prototype.slice.call(arguments,0) kann also wie folgt verstanden werden: Für das Array der Argumentklasse rufen wir die Prototypmethode Array.prototype.slice auf und verwenden dazu die Methode call() Beschränken Sie den Bereich auf In Argumenten kann Array.prototype hier als Argument verstanden werden, und Parameter 0 ist der erste Parameter der Slice()-Methode, der der Startpositionsindex ist. Auf diese Weise wird das Array der Argumentklasse in ein echtes Array umgewandelt.
Natürlich können Sie Traversal auch verwenden, um Argumente in ein Array umzuwandeln, sodass der Code natürlich mehr und nicht direkt genug ist.
Wir wissen, dass Array.prototype.slice.call(arguments) Objekte mit Längenattributen in Arrays konvertieren kann, mit Ausnahme der Knotensammlung unter IE (da das DOM-Objekt unter IE in Form eines COM-Objekts, js, implementiert ist). Objekte und COM-Objekte können nicht konvertiert werden)
Zum Beispiel:
var a={length:2,0:'first',1:'second'}; Array.prototype.slice.call(a);// ["first", "second"] var a={length:2}; Array.prototype.slice.call(a);// [undefined, undefined]Vielleicht verstehen diejenigen, die gerade erst angefangen haben, js zu lernen, nicht ganz, warum dieser Satz eine solche Funktion erfüllen kann. Ich bin zum Beispiel einer, also lasst es uns erkunden.
Slice hat zunächst zwei Verwendungszwecke, eine ist String.slice und die andere ist Array.slice. Die erste gibt einen String zurück und die zweite gibt ein Array zurück.
Array.prototype.slice.call(arguments) kann Argumente in ein Array konvertieren, dann ist es arguments.toArray().slice(); Können wir an dieser Stelle einfach Array.prototype.slice.call(arguments) sagen? ) Der Prozess besteht darin, den ersten übergebenen Parameter in ein Array umzuwandeln und dann Slice aufzurufen?
Schauen wir uns noch einmal die Verwendung von Anrufen an, wie im folgenden Beispiel gezeigt
可以看出,call了后,就把当前函数推入所传参数的作用域中去了,不知道这样说对不对,但反正this就指向了所传进去的对象就肯定的了。
到这里,基本就差不多了,我们可以大胆猜一下slice的内部实现,如下
Array.prototype.slice = function(start,end){ var result = new Array(); start = start || 0; end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键 for(var i = start; i < end; i++){ result.push(this[i]); } return result; }
大概就是这样吧,理解就行,不深究。
最后,附个转成数组的通用函数
var toArray = function(s){ try{ return Array.prototype.slice.call(s); } catch(e){ var arr = []; for(var i = 0,len = s.length; i < len; i++){ //arr.push(s[i]); arr[i] = s[i]; //据说这样比push快 } return arr; } }

JavaScript stammt aus dem Jahr 1995 und wurde von Brandon Ike erstellt und realisierte die Sprache in C. 1.C-Sprache bietet Programmierfunktionen auf hoher Leistung und Systemebene für JavaScript. 2. Die Speicherverwaltung und die Leistungsoptimierung von JavaScript basieren auf C -Sprache. 3. Die plattformübergreifende Funktion der C-Sprache hilft JavaScript, auf verschiedenen Betriebssystemen effizient zu laufen.

JavaScript wird in Browsern und Node.js -Umgebungen ausgeführt und stützt sich auf die JavaScript -Engine, um Code zu analysieren und auszuführen. 1) abstrakter Syntaxbaum (AST) in der Parsenstufe erzeugen; 2) AST in die Kompilierungsphase in Bytecode oder Maschinencode umwandeln; 3) Führen Sie den kompilierten Code in der Ausführungsstufe aus.

Zu den zukünftigen Trends von Python und JavaScript gehören: 1. Python wird seine Position in den Bereichen wissenschaftlicher Computer und KI konsolidieren. JavaScript wird die Entwicklung der Web-Technologie fördern. Beide werden die Anwendungsszenarien in ihren jeweiligen Bereichen weiter erweitern und mehr Durchbrüche in der Leistung erzielen.

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

Ja, der Motorkern von JavaScript ist in C. 1) Die C -Sprache bietet eine effiziente Leistung und die zugrunde liegende Steuerung, die für die Entwicklung der JavaScript -Engine geeignet ist. 2) Die V8-Engine als Beispiel wird sein Kern in C geschrieben, wobei die Effizienz und objektorientierte Eigenschaften von C kombiniert werden.

JavaScript ist das Herzstück moderner Websites, da es die Interaktivität und Dynamik von Webseiten verbessert. 1) Es ermöglicht die Änderung von Inhalten, ohne die Seite zu aktualisieren, 2) Webseiten durch DOMAPI zu manipulieren, 3) Komplexe interaktive Effekte wie Animation und Drag & Drop, 4) die Leistung und Best Practices optimieren, um die Benutzererfahrung zu verbessern.

C und JavaScript erreichen die Interoperabilität durch WebAssembly. 1) C -Code wird in das WebAssembly -Modul zusammengestellt und in die JavaScript -Umgebung eingeführt, um die Rechenleistung zu verbessern. 2) In der Spieleentwicklung kümmert sich C über Physik -Engines und Grafikwiedergabe, und JavaScript ist für die Spiellogik und die Benutzeroberfläche verantwortlich.

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.


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

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool
