Требуется изменение JS Метод модуля после его загрузки - PullRequest
0 голосов
/ 21 марта 2020

Можно ли изменить функцию модуля Require JS после его загрузки? Например.

define(['favorite_fruit'], [], function() {
  function fruitName() {
    return 'apple';
  }
  return { fruit: fruitName }
});

И я хотел бы изменить функцию fruitName, чтобы она возвращала 'банан' из глобальной javascript функции.

Я пробовал что-то вроде:

require.s.contexts._.defined['favorite_fruit'].fruit = function() { return 'banana'; };

Но везде, где этот модуль используется, он все равно возвращает apple вместо banana. Может быть, объект модуля хранится в другом месте, которое можно изменить?

1 Ответ

0 голосов
/ 23 марта 2020

Здесь я вижу два решения.

Решение # 1

Исправить сам модуль и добавить установщик:

define(['favorite_fruit'], [], function() {
  var fruit = 'apple';

  function fruitName() {
    return 'apple';
  }

  function setFruitName(name) {
    fruit = name;
  }

  return { fruit: fruitName, setFruit: setFruitName }
});

Решение # 2

Отмените определение модуля и определите его снова:

requirejs.undef('favorite_fruit');
define(['favorite_fruit'], [], function() {
  function fruitName() {
    return 'banana';
  }
  return { fruit: fruitName }
});
...