我正在开发一个可以在浏览器中工作的javascript SDK,这里他们使用
window.someVariableName
来存储数据。我们希望该变量可以在 JavaScript 代码中的任何位置访问,但这会将内部变量暴露给用户,这是不安全的。
有没有标准的方法来处理这个问题?
我在 javascript 中创建了一个单例类,并使用 getter 和 setter 添加了该类中的所有变量。
几年前,在我们使用捆绑器之前,这种情况很常见。你曾经像这样导入js文件:
<script type="text/javascript" src="somelib.js"></script>
然后该文件将声明一些全局变量。今天,在 ES 模块中,这将是:
import "somelib"
常见模式是使用 IIFE(立即调用函数表达式):
((global: any) => {
// Everything here is private
const s = "hello world!";
const doSomething = () => console.log(s);
// Expose only what you want to expose
global.Something = {
doSomething
};
})(window);
然后您可以按如下方式访问:
windows.Something.doSomething(); // "hello world!"
windows.s // undefined