this
в JavaScript
Каждый раз, когда фаза выполнения (код начинает выполняться) создается в javascript. JS engine предоставляет нам ключевое слово this
.
1. Вход в файл JS (скажем, script.js)
console.log(this);
это указывает на глобальный объект (окно).
Окно {postMessage: ƒ, размытие: ƒ, фокус: ƒ, закрытие: ƒ, кадры:
Окно, ...}
2. Внутри функция
function a(){
console.log(this);
}
a();
При использовании в функции это относится к Глобальному объекту (окну) .
Окно {postMessage: ƒ, размытие: ƒ, фокус: ƒ, закрытие: ƒ, кадры:
Окно, ...}
3. "использовать строгое"
"use strict";
function myFunction() {
console.log(this);
}
В строгом режиме это будет неопределенным, поскольку строгий режим не разрешает привязку по умолчанию.
неопределенный
4. выражение функции
var b = function(){
console.log(this);
}
b();
При использовании в выражении функции это относится к Глобальному объекту (окну) .
Окно {postMessage: ƒ, размытие: ƒ, фокус: ƒ, закрытие: ƒ, кадры:
Окно, ...}
5. Метод объекта
var c = {
name : "John",
log : function(){
console.log(this);
}
}
c.log();
this
относится к c
объекту.
{имя: "Джон", журнал: ƒ}
6. Метод внутри объекта метод
var d = {
name : "John",
log : function(){
console.log(this);
// refers to d object
var setname = function(){
console.log(this);
//refer to global object (window)
}
setname();
}
}
d.log();
Это причудливый режим JavaScript. Используйте приведенный ниже код для исправления.
var d = {
name : "John",
log : function(){
var self = this;
// in some js library `that` is used
console.log(self);
// refers to d object
var setname = function(){
console.log(self);
console.log(self.name);
//refers to d object
}
setname();
}
}
d.log();
this
относится к d
объекту.
{имя: "Джон", журнал: ƒ}