В этом руководстве вы узнаете о ключевом слове this в JavaScript с помощью примеров.
В JavaScript this
ключевое слово относится к объекту, из которого оно вызвано.
1. этот Inside Global Scope
Когда this
используется отдельно, this
относится к глобальному объекту ( window
объекту в браузерах). Например,
let a = this; console.log(a); // Window () this.name = 'Sarah'; console.log(window.name); // Sarah
Здесь this.name
то же самое, что и window.name
.
2. эта внутренняя функция
Когда this
используется в функции, this
относится к глобальному объекту ( window
объекту в браузерах). Например,
function greet() ( // this inside function // this refers to the global object console.log(this); ) greet(); // Window ()
3. Эта функция внутреннего конструктора
В JavaScript функции конструктора используются для создания объектов. Когда функция используется как функция-конструктор, this
относится к объекту, внутри которого она используется. Например,
function Person() ( this.name = 'Jack'; console.log(this); ) let person1 = new Person(); console.log(person1.name);
Вывод
Человек (имя: «Джек») Джек
Здесь this
относится к объекту person1. Вот почему person1.name
дает нам Джек.
Примечание . Когда this
используется с классами ES6, он относится к объекту, внутри которого он используется (аналогично функциям конструктора).
4. Этот метод внутреннего объекта
Когда this
используется внутри метода объекта, this
относится к объекту, внутри которого он находится. Например,
const person = ( name : 'Jack', age: 25, // this inside method // this refers to the object itself greet() ( console.log(this); console.log(this.name); ) ) person.greet();
Вывод
(имя: "Джек", возраст: 25, приветствовать: ƒ) Джек
В приведенном выше примере this
относится к person
объекту.
5. Эта внутренняя внутренняя функция
Когда вы обращаетесь к this
внутренней функции (внутри метода), this
относится к глобальному объекту. Например,
const person = ( name : 'Jack', age: 25, // this inside method // this refers to the object itself greet() ( console.log(this); // (name: "Jack", age… ) console.log(this.age); // 25 // inner function function innerFunc() ( // this refers to the global object console.log(this); // Window (… ) console.log(this.age); // undefined ) innerFunc(); ) ) person.greet();
Вывод
(имя: "Джек", возраст: 25, приветствовать: ƒ) 25 Окно (…) undefined
Здесь this
inside innerFunc()
относится к глобальному объекту, поскольку innerFunc()
находится внутри метода.
Однако this.age
снаружи innerFunc()
относится к person
объекту.
6. Эта функция внутренней стрелки
Внутри стрелочной функции this
относится к родительской области. Например,
const greet = () => ( console.log(this); ) greet(); // Window (… )
Стрелочные функции не имеют своих this
. Когда вы используете this
внутри стрелочной функции, this
относится к ее родительскому объекту области видимости. Например,
const greet = ( name: 'Jack', // method sayHi () ( let hi = () => console.log(this.name); hi(); ) ) greet.sayHi(); // Jack
Здесь this.name
внутри hi()
функция ссылается на greet
объект.
Вы также можете использовать функцию стрелки, чтобы решить проблему, возникающую undefined
при использовании функции внутри метода (как показано в примере 5). Например,
const person = ( name : 'Jack', age: 25, // this inside method // this refers to the object itself greet() ( console.log(this); console.log(this.age); // inner function let innerFunc = () => ( // this refers to the global object console.log(this); console.log(this.age); ) innerFunc(); ) ) person.greet();
Вывод
(имя: «Джек», возраст: 25, приветствовать: ƒ) 25 (имя: «Джек», возраст: 25, приветствовать:) 25
Здесь innerFunc()
определяется с помощью стрелочной функции. Он берет this
из своей родительской области видимости. Следовательно, this.age
дает 25 .
Когда стрелочная функция используется с this
, она относится к внешней области видимости.
7. Эта внутренняя функция со строгим режимом
Когда this
используется в функции со строгим режимом, this
это undefined
. Например,
'use strict'; this.name = 'Jack'; function greet() ( // this refers to undefined console.log(this); ) greet(); // undefined
Примечание . При использовании this
внутри функции в строгом режиме вы можете использовать вызов функции JavaScript ().
Например,
'use strict'; this.name = 'Jack'; function greet() ( console.log(this.name); ) greet.call(this); // Jack
Когда вы переходите this
с call()
функцией, greet()
обрабатывается как метод this
объекта (в данном случае глобальный объект).