以下工厂函数已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
将设置为新值,下次获取更新的值时。如果您想使变量保持只读,这会有所帮助,例如