Модули ES6 - лучший подход для создания неизменяемого сервиса - PullRequest
0 голосов
/ 09 мая 2019

Я использую следующий подход для создания одноэлементного сервиса в своем приложении:

myService.js :

let myService = {};

myService.doSomething = function() {
    //doing something
};

export {myService};

использованиев другом модуле :

import {myService} from 'myService.js'

myService.doSomething();

export {myService};

Обычно это работает нормально, но проблема в том, что возможно изменить службу в модуле, который ее импортирует:

import {myService} from 'myService.js'

myService.doSomething = function() {
    //do something different
};

export {myService};

Этоне является желательным для одиночного обслуживания, оно должно быть неизменным.

Как может быть достигнута неизменность?У кого-нибудь есть совершенно другой / лучший подход для создания неизменяемых сервисов в виде модулей ES6?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Вы можете создать приватную функцию в myService. Также создайте функцию по умолчанию pub в myservice и вызовите doSomething из этой функции по умолчанию.

Тогда в другом файле, когда вы вызовете myService, он даст доступ только к функции по умолчанию

let myService = {}
myService.doSomething = function() {
  console.log('Test');
  return 'myservice doSomething executed'
};
export function pub() {
  return myService.doSomething()
}


import * as test from './myService'
console.log(test.pub());

Пожалуйста, проверьте консоль этого DEMO

1 голос
/ 09 мая 2019

Привет, мы можем добиться, используя Object.freeze метод.Я создал одну демонстрацию https://stackblitz.com/edit/react-wfhq4c, пожалуйста, проверьте сайт разработчика Mozilla.

Вы также можете сослаться https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

...