Esse objeto sempre foi uma armadilha no JS, e é difícil julgar o que aponta. Frequentemente, cometemos esse tipo de erro devido à nossa experiência com C ++ ou Python. Em seguida, vamos falar sobre a propriedade desse objeto em detalhes.
regra 1: isto no ambiente global
O ambiente do JavaScript é inerentemente determinado pelas funções. No JS, o contexto não pode ser separado por blocos de código. O ambiente que não é envolvido pelas funções é o ambiente global. Isso no ambiente global aponta para a janela variável global. Veja o seguinte exemplo
A cópia do código é a seguinte:
var name = 'jjj';
console.log (this.name);
// O JJJ será produzido com sucesso
regra 2: isso quando chamado como um método
Obviamente, essa situação é fácil de julgar, é consistente consigo mesmo em Python. Isso indubitavelmente aponta para o objeto que chama o método
A cópia do código é a seguinte:
Var User = {
Nome: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
user.getName ();
// a saída KKK será emitida
regra 3: isso quando como construtor
Não preciso dizer muito sobre isso neste momento. Obviamente, aponta para o objeto recém -criado. A operação do construtor não cria um objeto, mas é apenas inicialização. O objeto é criado antes de ser executado.
Aqui estão alguns exemplos
A cópia do código é a seguinte:
Função Usuário (nome) {
this.name = nome;
}
var f1 = novo usuário ('kkk');
var f2 = usuário ('kkk');
console.log (f1.name); // kkk
console.log (f2.name); // indefinido não tem um atributo de nome
Regra4: esta chamada indireta
A chamada chamada indireta refere-se ao uso de funções Apply e Call to Call, e isso aponta para o primeiro parâmetro em sua lista de parâmetros.
A cópia do código é a seguinte:
var setName = function (nome) {
this.name = nome;
};
var user = {nível: 2};
user.Apply (setName, 'JJJ');
console.log (user.name); // jjj
Regra 5: isto em outros casos
Lembre -se de que isso não será alterado em outras situações, e este também é o lugar mais fácil para cometer erros.
A cópia do código é a seguinte:
var name = "codificador inteligente";
var pessoa = {
Nome: "foocoder",
Olá: function (sth) {
var dizhello = função (sth) {
console.log (this.name + "diz" + sth);
};
Sayhello (STH);
}
}
Person.hello ("Hello World"); // codificador inteligente diz Hello World
O código acima parece estranho, isso não deveria apontar para a pessoa?
Devemos lembrar que isso na função aninhada não apontará para a função que a anima. Neste exemplo, isso em SayHello não apontará para a função correspondente ao Hello. Se mudarmos um pouco o exemplo
A cópia do código é a seguinte:
Olá: function (sth) {
console.log (this.name + "diz" + sth);
}
// foocoder diz olá mundo
Todos deveriam ter entendido que, neste momento, Sayhello não está chamando como método, então isso aponta para o objeto global. . .
Neste momento, o problema é que o exemplo inicial de usar o nó para executar será indefinido diz Hello World. Gostaria de saber se há algum mestre para explicar.
Regra6: avalia todas as regras
Finalmente terminar com um exemplo
A cópia do código é a seguinte:
var name = "codificador inteligente";
Var User = {
Nome: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
var get = user.getName;
get (); // codificador inteligente
Você entende?