NOLOCK
现在揭示了模糊图案::
的以下缺点这种模式的缺点是如果私有函数引用 公共功能,如果补丁,公共功能不能被覆盖 有必要的。这是因为私人功能将继续 参考私有实现,模式不适用 公共成员,仅限于职能部门。
我不太明白上述段的意思,有人可以解释一下吗?私人职能是指公共职能,是不是很明白,有人可以将其分解吗?
答案 0 :(得分:2)
考虑:
Mod = function() {
function inc() {
return value() + 1;
}
var value = function() { return 42 }
var valuePlusOne = function() { return inc() }
return {
value: value,
valuePlusOne: valuePlusOne
}
}()
document.write(Mod.valuePlusOne()) // 43
Mod.value = function() {
return 999
}
document.write(Mod.valuePlusOne()) // still 43, not 1000

问题是inc
从其包含范围使用var value
,而不是模块对象的value
属性。更改模块时,这不会影响范围内的var value
。
解决方法是将私有函数绑定到要返回的对象:
Mod = function() {
var value = function() { return 42 }
var valuePlusOne = function() { return inc() }
var me = {
value: value,
valuePlusOne: valuePlusOne
}
function inc() {
return me.value() + 1;
}
return me;
}()
document.write(Mod.valuePlusOne()) // 43
Mod.value = function() {
return 999
}
document.write(Mod.valuePlusOne()) // 1000