JS proporciona algunos objetos, funciones y constructores integrados para que los programemos, como Math, parseInt, Object, Array, etc. Todos estos son visibles y se pueden utilizar durante la programación. Por ejemplo, puedo usar un nuevo Objeto o una nueva Matriz.
Algunos son invisibles y sólo pueden ser proporcionados por el motor en circunstancias especiales. Este tipo de objetos suelen tener una funcionalidad reducida. Aquí hay algunos
1. Tipo de argumentos
El programador no puede crear manualmente los objetos del tipo Argumentos, es decir, no se pueden crear nuevos Argumentos(). Tiene y solo un argumento de objeto.
Copie el código de código de la siguiente manera:
función función() {
console.log(argumentos[0]) // 1
console.log(argumentos.longitud) // 3
}
divertido(1, 2, 3)
El objeto de argumentos se crea cuando se llama a la función y solo es visible y utilizado dentro de la función. Puede ver que los argumentos son muy similares a Array, los elementos se pueden recuperar por índice y también tienen un atributo de longitud. Pero no es Array. No tiene algunos métodos de Array como push, pop, etc. Los argumentos se definen en ES5 10.6.
2. La función devuelta por bind es muy especial.
bind es un nuevo método agregado por ES5 a Function.prototype. Se llama directamente en la función como call/apply. Devuelve una función con contexto y parámetros especificados.
Copie el código de código de la siguiente manera:
función función (edad) {
console.log('nombre: ' + this.name + ', carrera: ' + edad)
}
var persona = {nombre: 'John McCarthy'}
var f1 = func.bind(persona, 'informático')
f1() // nombre: John McCarthy, carrera: informático
Puede ver que la función devuelta f1 se llama usando paréntesis como una función normal. Todo funciona bien, pero el siguiente código te sorprenderá
Copie el código de código de la siguiente manera:
función función (edad) {
console.log('nombre: ' + this.name + ', carrera: ' + edad)
}
var persona = {nombre: 'John McCarthy'}
var f1 = func.bind(persona, 'informático')
console.log(f1.prototype) // indefinido
En comparación con el código anterior, la última oración es diferente. f1 () no se ejecuta, pero se imprime f1.prototype y se encuentra que no está definido.
¿Extraño? ¿No tiene cada función un atributo de prototipo? Esto se utiliza para implementar la herencia de prototipos. De hecho, la función devuelta por bind es especial, no tiene prototipo. Esta función especial es creada por el motor JS y el programador del cliente no puede medirla directamente mediante una declaración de función o una función.
Esto está claramente indicado en la especificación ES5 15.3.4.5.