Serie JS Basics: hablemos de esto
En la programación orientada a objetos, a menudo tenemos que lidiar con esto. En cuanto a dónde apunta esto en la función, aquellos de nosotros que somos nuevos en JavaScript a menudo no lo sabemos con claridad.
Debemos tener claro que el punto de this en la función no es fijo, y está relacionado con el entorno cuando se ejecuta la función. En pocas palabras, podemos entender que this en la función apunta al objeto. Actualmente llamamos a la función, por lo que también digerimos este tipo de charla para las siguientes situaciones.
1. Cuando se llama como una función
Un ejemplo simple es el siguiente:
Cuando el código se ejecuta en el navegador, se imprimen todos los objetos de la ventana.
Porque cuando se llama como una función, la función se considera llamada en el objeto global de forma predeterminada (objeto global en el entorno nodejs) Nota: no en el objeto de alcance donde se encuentra la función actual p>
Una cosa a tener en cuenta es la función de flecha (hablaremos de ella en detalle más adelante)
2. Cuando se llama como método de objeto
Un ejemplo simple es como siguiente
Cuando se ejecuta el código, se promete el objeto obj y el valor del nombre es obj. Esto cumple con nuestras expectativas: la función se llama actualmente como un método de obj, por lo que el objeto que llama a la función es. obj.
Esta situación es fácil de digerir para nosotros, pero es diferente en otra situación. Por ejemplo,
El valor del nombre del objeto de ventana impreso en este momento es prueba [. what][ what]
Resulta que fn apunta a una función en este momento (no apunta a obj para ejecutar logThis La llamada de fn es para llamar a una función). cuál es el primer caso, entonces El ejemplo anterior es el siguiente:
3. Ejecutado como constructor
Un ejemplo simple es el siguiente
Lo que se imprime en este momento es nuestro objeto de personas recién generado.
Porque el proceso de ejecución del constructor puede entenderse simplemente como
1. Se genera un nuevo objeto (personas)
2. El objeto prototipo del el objeto apunta al objeto prototipo del constructor (People.prototype)
3. Llame al constructor a través del objeto recién generado (puede entenderse simplemente como People.call (this))
4 Llame como una función de flecha
Un ejemplo simple es el siguiente
En este momento, podemos imprimir porque todos son objetos de ventana, pero el resultado es una bofetada. Lo primero que se imprime es el objeto de ventana y lo segundo es el objeto obj [enojado]
Resulta que la función de flecha no genera un nuevo puntero this. en qué entorno se ejecuta la función de flecha, apunta a este objeto del entorno actual, que es el primero. En los dos casos, esto apunta a obj.logThis() cuando se ejecuta (mencionamos el objeto obj anteriormente)
5. Aplicar, llamar y vincular llamadas
El puntero predeterminado de esto son los cuatro mencionados anteriormente, pero siempre es necesario personalizar el puntero de este. , los tres métodos de aplicar, llamar y vincular son útiles
Estos tres métodos son todos métodos del objeto de función en sí. El primer parámetro admite pasar este conjunto de objetos cuando se llama a la función. como
En este momento, lo primero que se imprime es el objeto ventana (ver descripción 1), el segundo imprime el objeto obj (indicamos claramente que este objeto de la ejecución de la función es obj al pasar parámetros)
Las diferencias entre estos tres métodos son las siguientes
Espero que el resumen anterior sea útil para todos [zuoyi]