更改工厂函数中的变量时会发生什么情况?(JavaScript)



以下工厂函数已on = false

function Radio(mode) {
let on = false;
return {
mode: mode,
turnOn: function () {
on = true;
},
isOn: function () {
return on;
}
};
}

如果我使用此工厂函数创建了一个对象,并使用其中fmRadio.turnOn();函数将on的值更改为true,如以下行所示。

let fmRadio = Radio('fm');
fmRadio.turnOn();

fmRadio.isOn();的输出将on = true

那么,变量on变化在哪里?我的意思是它不是创建的fmRadio对象的一部分。如果我们尝试调用它,它将返回未定义

fmRadio.on;
//undefined

它是否会更改原始工厂函数中on的值?

变量on仅存在于function的范围内。当您尝试访问on变量时,on该变量不会公开供函数外部使用,因为该函数仅返回带有mode, turnOn and turnOff的对象。你可以认为这个变量(on(是一个私有声明的变量,它没有任何来自类外部的访问(当然不是这样的,因为这里有一个函数,但给你一个例子(。如果从函数返回on变量,则可以使用ObjectName.on

你能做的是

function Radio(mode) {
let on = "test";
return {
getOn: function() { 
return on;
},
setOn: function(value) { 
on = value;
},
mode: mode,
turnOn: function () {
on = true;
},
isOn: function () {
return on;
}
};
}

在这种情况下,我认为您可以更好地理解它,我创建了另外两个函数,其中一个函数用于获取变量的值on另一个用于设置值,就像 Java 或 C# 中的 getter 和 setter 一样。

现在,如果您通过函数getOn获取变量的值,则将返回值"test",但是如果您通过setOn函数将其设置为另一个值,则变量on将设置为新值,下次获取更新的值时。如果您想使变量保持只读,这会有所帮助,例如

相关内容

最新更新