Получение "_this.fooBar не является функцией" при вызове локального метода fooBar из другого локального метода внутри модуля строгого экспорта по умолчанию - PullRequest
0 голосов
/ 16 апреля 2020

Вот пример кода StackBlitz: js -m8uxyl .

Вот вставленный модуль, с которым у меня возникла проблема:

'use strict'

export default {
  isTrue: (val) => {
    return val ? true : false;
  },

  doSquare: (val) => {
    return this.isTrue(val) ? val * val : false;
  },

  doCube: (val) => {
    return this.doSquare(val) * val;
  }
}

Как видите, Когда я пытаюсь запустить метод doSquare или doCube, я получаю следующие ошибки: _this.isTrue is not a function или _this.doSquare is not a function.

Как правильно вызвать локальный метод из другого местный метод? Это действительно ошеломляет мой разум в данный момент ...

1 Ответ

2 голосов
/ 16 апреля 2020

Это вызвано сочетанием работы модулей и this в функциях стрелок.

Во-первых, файл является модулем ES6, и это делает this на верхнем уровне сценария объект определения модуля.

Во-вторых, функции стрелок (()=>{}) наследуют this из области, в которой они объявлены, в отличие от старого стиля function(){}, где this будет объектом, которым он объявляется как собственность. Это означает, что this внутри функций является объектом модуля верхнего уровня, а не экспортированным объектом.

Если вместо этого они были объявлены с использованием function(){} старого стиля, они должны работать как положено.

...