Este principio de trabajo
Si una función se llama como un método de objeto, esto se asignará a este objeto.
Copiar código del código de la siguiente manera:
var parent = {
Método: function () {
console.log (esto);
}
};
parent.method ();
// <
Tenga en cuenta que este comportamiento es muy "frágil". Esto confunde a la mayoría de los desarrolladores.
Copiar código del código de la siguiente manera:
ThisClownCar ();
// <-Window
Cambiar esto
Los métodos .call, .apply y .bind se usaron para operar el método de llamar a las funciones para ayudarnos a definir los valores de esto y los valores de los parámetros pasados a la función.
Function.prototype.call puede tener cualquier número de parámetros.
Copiar código del código de la siguiente manera:
Array.prototype.slice.call ([1, 2, 3], 1, 2)
// <- [2]
Function.prototype.apply es similar a .call, pero los parámetros que pasó a la función es una matriz, no ningún parámetro.
String.prototype.split.apply ('13 .12.02 ', ['. '])
// <- ['13', '12', '02']
Function.prototype.bind crea una función especial que siempre usará los parámetros pasados a .Bind como un valor que se puede pasar a .Bind, y la versión Curride que puede asignar parte de los parámetros y crear la función original.
Copiar código del código de la siguiente manera:
var arr = [1, 2];
var add = array.prototype.push.bind (arr, 3);
// Efectivamente lo mismo que Arr.Push (3)
agregar ();
// Efectivamente lo mismo que Arr.Push (3, 4)
agregar (4);
console.log (arr);
// <- [1, 2, 3, 3, 4]
Esto en la cadena de dominio
En el siguiente ejemplo, esto no podrá permanecer sin cambios en la cadena de dominio. Este es el defecto de las reglas, y a menudo trae confusión a los desarrolladores aficionados.
Copiar código del código de la siguiente manera:
Function Scoping () {
console.log (esto);
Función de retorno () {
console.log (esto);
};
}
alcance () ();
// <-Window
// <-Window
Existe un método común para crear una variable local para mantener una referencia a esto, y no debe haber variables de vida en el dominio de subcacción. Las variables del mismo nombre en el subcape cubrirán la referencia a esto en la puntuación principal. http://www.cnblogs.com/sosoft/
Copiar código del código de la siguiente manera:
función retener () {
var seelf = this;
Función de retorno () {
console.log (yo);
};
}
Retener () ();
// <-Window
A menos que realmente desee usar el alcance principal al mismo tiempo y el actual este valor, debido a algunas razones inexplicables, prefiero usar la función de método .bind. Esto se puede usar para especificar el alcance principal para designar el subcape.
Copiar código del código de la siguiente manera:
function up () {) {)
Función de retorno () {
console.log (esto);
} .Bind (esto);
}
romper () ();
// <-Window