почему «это» отличается в буквальном объекте и классе? - PullRequest
0 голосов
/ 17 октября 2019

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

let hat = {
 name: "Faviourite",
 writeDetails: () =>
 console.log(this.name)
};

let temp = hat.writeDetails;
temp(); //output: undefined

и

class hat {
   constructor(name) {
      this.name = name;
   }
   writeDetails = () => {
      console.log(this.name)
   }
}

let myHat = new hat("Faviourite");
let temp = myHat.writeDetails;
temp();   //Output: Faviourite

Для первого примера, разве функция стрелки не переходит на следующий уровень (то есть hat) и использует hat как this, так почемувсе еще производит undefined?

1 Ответ

0 голосов
/ 17 октября 2019

Вы вызываете temp (), который собирается вызывать окно, поэтому он печатает window.name вместо Faviourite

let hat = {
 name: "Faviourite",
 writeDetails: () =>
 console.log(this.name)
};

let temp = hat.writeDetails;
temp(); 

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

Во втором случае, если вы видите, что ES5 по-прежнему использует функцию () {}жирной стрелки, которую, как вы думаете, вы используете, этот блог может помочь вам понять

...