Este princípio de trabalho
Se uma função for chamada de método de objeto, isso será atribuído a esse objeto.
Copie o código do código da seguinte forma:
var pai = {
Método: function () {
console.log (this);
}
};
parent.method ();
// <-parent
Observe que esse comportamento é muito "frágil". Isso confunde a maioria dos desenvolvedores.
Copie o código do código da seguinte forma:
ThisClowCar ();
// <-window
Mude isso
Os métodos .Call, .Apply e .Bind foram usados para operar o método de chamada funções para nos ajudar a definir os valores disso e os valores dos parâmetros passados para a função.
Function.prototype.call pode ter qualquer número de parâmetros.
Copie o código do código da seguinte forma:
Array.prototype.slice.call ([1, 2, 3], 1, 2)
// <- [2]
Function.prototype.Apply é semelhante ao .Call, mas os parâmetros que ele passou para a função é uma matriz, não qualquer parâmetro.
String.prototype.split.apply ('13 .12.02 ', ['. '])
// <- ['13', '12', '02']
Function.prototype.bind cria uma função especial que sempre usará parâmetros passados para .bind como um valor que pode ser passado para .bind e a versão da moeda que pode alocar parte dos parâmetros e criar a função original.
Copie o código do código da seguinte forma:
var arr = [1, 2];
var add = array.prototype.push.bind (arr, 3);
// efetivamente o mesmo que arr.push (3)
adicionar ();
// efetivamente o mesmo que arr.push (3, 4)
add (4);
console.log (arr);
// <- [1, 2, 3, 3, 4]
Isso na cadeia de domínio
No exemplo a seguir, isso não poderá permanecer inalterado na cadeia de domínio. Este é o defeito das regras e muitas vezes traz confusão aos desenvolvedores amadores.
Copie o código do código da seguinte forma:
Função scoping () {
console.log (this);
Return function () {
console.log (this);
};
}
Scoping () ();
// <-window
// <-window
Existe um método comum para criar uma variável local para manter uma referência a isso, e não deve haver variáveis de vida no domínio da sub -ação. As variáveis de mesmo nome no sub -escopo cobrirão a referência a isso na pontuação dos pais. http://www.cnblogs.com/sosoft/
Copie o código do código da seguinte forma:
Função retenção () {
var seelf = this;
Return function () {
console.log (self);
};
}
Retenção () ();
// <-window
A menos que você realmente queira usar isso do escopo dos pais ao mesmo tempo e do atual valor, devido a alguns motivos inexplicáveis, prefiro usar o método. Isso pode ser usado para especificar o escopo dos pais para designar o sub -escopo.
Copie o código do código da seguinte forma:
function up () {) {)
Return function () {
console.log (this);
} .Bind (this);
}
quebrar () ();
// <-window