假设我有一个具有以下结构的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({})();
答案 0 :(得分:3)
在包含FirstClass
,SecondClass
和secret
的IIFE中实例化firstClass,并且仅从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
的属性。构造函数。
答案 1 :(得分:1)
此代码段应解决您的关闭需求。
<script>
(function (global) {
const secret = 'code';
function FirstClass() {
this.init = function () {
console.log(SecondClass());
}
return this;
}
const firstClass = FirstClass();
function SecondClass() {
return 'value';
}
global.firstClass = firstClass;
})(window)
</script>
// some html
<script>
firstClass.init(); // should return a value
console.log(typeof secret); // should be undefined
console.log(typeof SecondClass); // should be undefined
console.log(typeof FirstClass); // should be undefined
</script>