我正在使用以下方法在应用程序中创建类似单例的服务:
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模块?
答案 0 :(得分:1)
您好,我们可以使用Object.freeze
方法来实现。我创建了一个演示https://stackblitz.com/edit/react-wfhq4c,请检查mozilla开发人员网站。
您还可以参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
答案 1 :(得分:1)
您可以在myService
中创建一个私有函数。还要在myservice中创建默认功能pub
,然后从该默认功能调用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
的控制台