JS stellt einige integrierte Objekte, Funktionen und Konstruktoren zur Verfügung, die wir programmieren können, z. B. Math, parseInt, Object, Array usw. Diese sind alle sichtbar und können während der Programmierung verwendet werden. Ich kann zum Beispiel ein neues Objekt oder ein neues Array verwenden.
Einige sind unsichtbar und können vom Motor nur unter besonderen Umständen bereitgestellt werden. Diese Art von Objekten weist häufig eine eingeschränkte Funktionalität auf. Hier sind einige
1. Argumenttyp
Die Objekte des Arguments-Typs können nicht manuell vom Programmierer erstellt werden, d. h. Sie können keine neuen Arguments() erstellen. Es hat nur ein Objektargument
Kopieren Sie den Codecode wie folgt:
Funktion func() {
console.log(arguments[0]) // 1
console.log(arguments.length) // 3
}
Spaß (1, 2, 3)
Das Argumentobjekt wird beim Aufruf der Funktion erstellt und ist nur innerhalb der Funktion sichtbar und wird verwendet. Sie können sehen, dass Argumente dem Array sehr ähnlich sind, Elemente über den Index abgerufen werden können und auch über ein Längenattribut verfügen. Aber es ist kein Array. Es verfügt nicht über einige Array-Methoden wie Push, Pop usw. Argumente werden in ES5 10.6 definiert.
2. Die von bind zurückgegebene Funktion ist etwas ganz Besonderes.
bind ist eine neue Methode, die von ES5 zu Function.prototype hinzugefügt wurde. Sie wird wie call/apply direkt in der Funktion aufgerufen. Es gibt eine Funktion mit angegebenem Kontext und angegebenen Parametern zurück.
Kopieren Sie den Codecode wie folgt:
Funktion func(age) {
console.log('name: ' + dieser.name + ', Karriere: ' + Alter)
}
var person = {Name: 'John McCarthy'}
var f1 = func.bind(Person, 'Informatiker')
f1() // Name: John McCarthy, Karriere: Informatiker
Sie können sehen, dass die zurückgegebene Funktion f1 wie eine normale Funktion mit Klammern aufgerufen wird. Alles funktioniert gut, aber der folgende Code wird Sie überraschen
Kopieren Sie den Codecode wie folgt:
Funktion func(age) {
console.log('name: ' + dieser.name + ', Karriere: ' + Alter)
}
var person = {Name: 'John McCarthy'}
var f1 = func.bind(Person, 'Informatiker')
console.log(f1.prototype) // undefiniert
Im Vergleich zum obigen Code wird f1() nicht ausgeführt, aber f1.prototype wird ausgedruckt und als undefiniert befunden.
Seltsam? Verfügt nicht jede Funktion über ein Prototypattribut, das zur Implementierung der Prototypenvererbung verwendet wird? Tatsächlich ist die von bind zurückgegebene Funktion etwas Besonderes, sie hat keinen Prototyp. Diese spezielle Funktion wird von der JS-Engine erstellt und kann vom Client-Programmierer nicht direkt durch Funktionsdeklaration oder Funktion gemessen werden.
Dies ist in der Spezifikation ES5 15.3.4.5 klar dargelegt