JS fournit des objets, fonctions et constructeurs intégrés que nous pouvons programmer, tels que Math, parseInt, Object, Array, etc. Ceux-ci sont tous visibles et peuvent être utilisés lors de la programmation. Par exemple, je peux utiliser un nouvel objet ou un nouveau tableau.
Certains sont invisibles et ne peuvent être fournis par le moteur que dans des circonstances particulières. Ces types d'objets ont souvent des fonctionnalités réduites. En voici quelques-uns
1.Type d'argument
Le type Arguments ne peut pas avoir ses objets créés manuellement par le programmeur, c'est-à-dire que vous ne pouvez pas créer de nouveaux Arguments(). Il n'a qu'un seul argument d'objet
Copiez le code comme suit :
fonction fonction() {
console.log(arguments[0]) // 1
console.log(arguments.longueur) // 3
}
amusant (1, 2, 3)
L'objet arguments est créé lorsque la fonction est appelée et n'est visible et utilisé qu'à l'intérieur de la fonction. Vous pouvez voir que les arguments sont très similaires à Array, les éléments peuvent être récupérés par index et ils ont également un attribut de longueur. Mais ce n'est pas Array. Il n'a pas certaines méthodes de Array telles que push, pop, etc. Les arguments sont définis dans ES5 10.6.
2. La fonction renvoyée par bind est très spéciale.
bind est une nouvelle méthode ajoutée par ES5 à Function.prototype. Elle est appelée directement sur la fonction comme call/apply. Il renvoie une fonction avec le contexte et les paramètres spécifiés.
Copiez le code comme suit :
fonction fonction (âge) {
console.log('nom : ' + this.name + ', carrière : ' + âge)
}
var personne = {nom : 'John McCarthy'}
var f1 = func.bind(personne, 'informaticien')
f1() // nom : John McCarthy, carrière : informaticien
Vous pouvez voir que la fonction renvoyée f1 est appelée en utilisant des parenthèses comme une fonction normale. Tout fonctionne bien, mais le code suivant vous surprendra
Copiez le code comme suit :
fonction fonction (âge) {
console.log('nom : ' + this.name + ', carrière : ' + âge)
}
var personne = {nom : 'John McCarthy'}
var f1 = func.bind(personne, 'informaticien')
console.log(f1.prototype) // non défini
Par rapport au code ci-dessus, la dernière phrase est différente. f1() n'est pas exécuté, mais f1.prototype est imprimé et s'avère indéfini.
Bizarre? Chaque fonction n'a-t-elle pas un attribut de prototype ? Celui-ci est utilisé pour implémenter l'héritage de prototype. En effet, la fonction renvoyée par bind est particulière, elle ne possède pas de prototype. Cette fonction spéciale est créée par le moteur JS et ne peut pas être directement mesurée par le programmeur client via une déclaration de fonction ou une fonction.
Ceci est clairement indiqué dans la spécification ES5 15.3.4.5