Что, черт возьми, за «это»?

Так что же это" ? this ссылается на объект, который выполняется в текущей функции. Я собираюсь дать вам очень простой трюк, если эта функция является частью объекта. Мы вызываем эту функцию и метод правильно, поэтому, если эта функция является методом в объекте, она ссылается на сам объект. В противном случае, если это обычная функция, что означает, что она не является частью объекта, она ссылается на глобальный объект, который является объектом окна в браузерах и глобальным в узле.

const video = {
   title : 'a',
   play() {
   console.log (this)
 }
};

В этом примере, поскольку play - это метод в видеообъекте, «This» ссылается на сам объект с тем же маркером.

Результат: {title: «a», play: ƒ}

Мы можем добавить метод позже в этот объект, и мы получим тот же результат. например, мы можем добавить сюда метод остановки и установить его как функцию.

const video = {
  title : 'a',
  play() {
  console.log (this)
 }
};
video.stop = function () {
  console.log(this)
}

Эта функция является методом в объекте, поэтому «this» ссылается на сам объект. вывод будет: {title: «a», play: ƒ, stop: ƒ}

Если эта функция является обычной функцией, что означает, что она не является частью объекта, «this» ссылается на глобальный объект, который является объектом окна в браузерах и глобальным в узле. поэтому давайте определим такую ​​обычную функцию:

function playVideo () {
  console.log (this);
}

Если вы зарегистрируете это в консоли, мы увидим глобальный объект, который является окном в браузерах и глобальным в узле.

вывод будет: Window {0: global, window: Window, self: Window, document: document, name: «, location: Location,…}

Приведенный ниже код является еще одним примером «этого».

function video (title ) {
  this.title = title;
  console.log (this) ; 
}
const v = new video("a");

вывод будет: видео {название: «а»}

Но что здесь происходит? Давайте посмотрим . в этом примере мы используем новый оператор, который имеет место для связи функций конструктора с обычной функцией. при использовании оператора new этот оператор new создает новый пустой объект, подобный этому, и устанавливает его в этой функции-конструкторе так, чтобы он указывал на него.

Другой пример :

const video = {
  title ='a',
  tags =['a','b','c'],
  showTag(){
  this.tags.foreach (function (function (tag) {
  console.log(this , tag);
   };)
  }
};
video.showTag();

«This» в этом примере относится к окну, не должно ссылаться на видеообъект, потому что здесь мы находимся внутри этой функции обратного вызова. эта функция - обычная функция. это метод в видеообъекте. единственный метод, который у нас есть, - это showTags. поскольку это обычная функция, это относится к глобальному объекту. но как мы можем это решить?

мы должны передать эту функцию в качестве аргумента функции обратного вызова следующим образом:

const video = {
title ='a',
tags =['a','b','c'],
showTag(){
this.tags.foreach (function (function (tag) {
console.log(this.tags , tag);
}; this )
}
};
video.showTag();

Если вам понравился этот пост и он был полезен, пожалуйста, нажмите кнопку хлопать 👏 несколько раз, чтобы показать поддержку, спасибо.