var ModuelPattern=(function () {
var x="A"
var change=function(){
if(x==="A"){
x="B"
}
else{
x="A"
}
}
return{
x:x,
f:change
}
})();
ModuelPattern.f()
console.log(ModuelPattern.x)
我无法找到一种方法来使用揭示模块模式和外部访问来更新 IIFE 内部的 x 范围
答案 0 :(得分:0)
您可以在返回的对象中使 x
成为一个 getter 函数:
var ModuelPattern=(function () {
var x="A"
var change=function(){
if(x==="A"){
x="B"
}
else{
x="A"
}
}
return{
get x() { return x; },
set x(_) {},
f:change
}
})();
ModuelPattern.f()
console.log(ModuelPattern.x)
这允许返回的对象访问调用原始工厂函数形成的闭包中的局部变量。我添加了一个虚拟的 setter 函数作为说明。
答案 1 :(得分:-1)
使用 this
关键字访问对象自身的属性。
var ModuelPattern=(function () {
this.x = "A"
this.change=function() {
if(this.x==="A"){
this.x = "B"
}
else{
this.x = "A"
}
}
return {
x: this.x,
f: this.change
}
})();
console.log(ModuelPattern.x)
ModuelPattern.f()
console.log(ModuelPattern.x)