javascript - 如何使用匿名函数在 Javascript 中仅使某些函数和变量全局可用?
问题描述
假设我有一个具有结构的 html 文件
<script>
let firstClass = new FirstClass();
var secret = 'code';
function FirstClass() {
this.init = function () {
console.log(SecondClass());
}
}
function SecondClass() {
return 'value';
}
</script>
// some html
<script>
firstClass.init(); // should return a value
console.log(secret); // should be undefined
SecondClass(); // should not be accessible
FirstClass(); // should not be accessible
</script>
我如何确保只有firstClass.init()
的第二部分可用<script>
而不可用SecondClass()
?
我想使用匿名函数,比如;function({})();
解决方案
FirstClass
在包含、SecondClass
和的 IIFE 中实例化 firstClass secret
,并且仅从 IIFE 返回firstClass
:
<script>
const firstClass = (() => {
const secret = 'secret';
function FirstClass() {
this.init = function() {
console.log(SecondClass());
}
}
function SecondClass() {
return 'value';
}
return new FirstClass;
})();
</script>
<script>
firstClass.init(); // should return a value
console.log(
typeof secret,
typeof SecondClass,
typeof FirstClass
);
</script>
请注意,您需要使用</script>
,而不是<scipt>
,并且new
在调用构造函数时需要使用 ,以便使用构造函数中分配给的属性this
。
推荐阅读
- php - 访问 WordPress index.php 响应网站目录内容文件
- python - python相当于r的??搜索功能
- wpf - 侧边栏wpf中具有多个可折叠子菜单的侧边栏
- google-bigquery - BQ STRUCT 与 RECORD 类型?
- google-analytics - Google Analytics 演示/沙盒帐户
- python-3.x - 有没有办法在 Altair 中选择或突出显示最后一个或第一个“n”个数据点?
- php - 致命错误:无法声明类 InterdraftFactuursturen,因为该名称已在
- filter - DeepFix - 位置偏向卷积
- javascript - 更改元素永远不会触发 addEventListener
- linux - 发现:在 Ubuntu Server 18.4 中缺少 `-exec' 的参数