Sob escopo global
esse;
Ao usar isso em um escopo global, ele aponta para um objeto global.
Aqui está uma introdução detalhada ao objeto global:
O objeto global é um objeto que foi criado antes de inserir qualquer contexto de execução;
Existe apenas uma cópia desse objeto e suas propriedades podem ser acessadas em qualquer lugar do programa. O ciclo de vida do objeto global termina no momento em que o programa sai.
No estágio inicial de criação do objeto global, matemática, string, data, parseint, são inicializados como seus próprios atributos, etc., e outros objetos adicionais também podem ser criados como atributos (que podem apontar para o próprio objeto global). Por exemplo, no DOM, a propriedade da janela do objeto global pode se referir ao próprio objeto global.
Portanto, é o mesmo que este.Window no console.
Ao chamar uma função
foo ();
Aqui, isso também aponta para o objeto global.
Ao chamar um método
test.foo ();
Neste exemplo, isso apontará para o objeto de teste.
Ao ligar para um construtor
novo foo ();
Uma função é usada com a palavra -chave nova quando chamado, que chamamos de construtor. Neste momento, dentro da função, isso aponta para o objeto recém -criado.
Quando definido explicitamente
function foo (a, b, c) {} // var bar = {}; foo.apply (bar, [1, 2, 3]); // a matriz será expandida para o abaixoFoo.Call (barra, 1, 2, 3); // resulta em a = 1, b = 2, c = 3Ao usar os métodos de Function.Prototype de aplicar e chamar, o valor disso é explicitamente definido para o primeiro parâmetro do método.
Portanto, diferentemente das regras ao chamar uma função, isso no exemplo acima aponta para bar.
Aqui estão os métodos de chamada e aplicação:
Método de chamada :
Sintaxe: Call ([ThisObj [, Arg1 [, Arg2 [, [, .argn]]]]])
Definição: Chame um método de um objeto para substituir o objeto atual por outro objeto.
Aplicar método :
Sintaxe: Aplicar ([ThisObj [, Argarray]]))
Definição: aplique um método de um determinado objeto e substitua o objeto atual por outro objeto.
Aqui, precisamos observar que isso não pode ser usado para apontar para o próprio objeto quando o objeto é literalmente declarado. do seguinte modo:
var obj = {me: this}Aqui, isso não apontará para o OBJ, e a aplicação disso é limitada às cinco situações acima.
Resumir
Embora a situação acima seja principalmente significativa, isso no segundo caso (ou seja, ao chamar uma função) é realmente raramente útil, o que é considerado outro erro no design de JavaScript.
Foo.method = function () {function test () {// Isso é definido como o objeto global} test ();}Como mencionamos acima, isso aqui apontará para o objeto global, não a função Foo.
Para ter uma maneira de apontar para o teste, precisamos criar uma variável local dentro do método apontando para foo.
Foo.method = function () {var que = this; function test () {// use isso em vez disso aqui} test ();}Esse é apenas um nome de variável normal, mas é frequentemente usado para apontar para esse externo.
Há outra coisa interessante relacionada ao alias da função, ou seja, quando um método é atribuído a uma variável.
var teste = algumObject.MethodTest; test ();
No exemplo acima, o teste será tratado como uma função normal; portanto, de acordo com o segundo caso (ou seja, quando uma função é chamada), isso dentro dela apontará para uma variável global, não algum objeto.
Embora essa ligação tardia pareça uma decisão ruim a princípio, é na verdade a base da herança do protótipo.
function foo () {} foo.prototype.method = function () {}; barra de função () {} bar.prototype = foo.prototype; new bar (). métod ();Neste ponto, quando o método é chamado, ele apontará para o objeto de instância da barra.