ES6 Arrow Функция Странное поведение - PullRequest
0 голосов
/ 24 июня 2018

Привет, ребята. Я немного озадачен функцией стрелок. Я прочитал документацию по функциям стрелок для разработчиков Mozila, и я обнаружил, что функции стрелок нельзя использовать в качестве конструкторов, и при работе с new выдает ошибку.но в этом примере я не получил никаких ошибок, он возвращает пустой объект, однако я передал параметры, с которыми я хочу построить объект.

Вот документация .

let ConstructObjectArrow = (name, age, city)=>{
  this.name = name;
  this.age = age;
  this.city = city;
}

let armin = new ConstructObjectArrow("Armin", 32, 'London');
console.log(armin);

. Вывод: ConstructObjectArrow {}, и у него есть прото, не определенное, как сказано в документации.

1 Ответ

0 голосов
/ 24 июня 2018

Вы не можете использовать функцию стрелки для конструктора, и это не имеет смысла.

По определению, функция стрелки берет свое значение this из лексического контекста. Следовательно, он не будет иметь значения this от нового объекта, поэтому он не работает как конструктор.

Из-за этого интерпретатор даже не позволяет вам попытаться сгенерировать TypeError, потому что вы не передаете соответствующий тип функции конструктора в new.

Помните, что функции стрелок - это не просто синтаксические ярлыки, они вызывают разницу в поведении со значением this, и это различие подходит только в некоторых случаях.

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

Внутренний для реализации Javascript, конструктор должен быть объектом типа Function определенного типа, который имеет различные внутренние методы, такие как [[Construct]], а функция стрелки не имеет этих внутренних свойств. Таким образом, когда вы пытаетесь вызвать new, интерпретатор обнаруживает, что вы не передаете правильный тип функции new, и, таким образом, он создает ошибку во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...