AFAIK了解javascript中的模块模式,它用于创建一个命名空间,其中变量和函数对该命名空间变为私有,以便防止它们被无意操纵。例如。请考虑以下代码:
var isTouchDevice = 'ontouchstart' in document.documentElement;
//some code...
if(isTouchDevice == 1) {
alert("You are using a touchscreen device");
}
在上面的代码中,如果我错误地将if条件中的一个等号跳过if(isTouchDevice = 1)
那么这将污染整个代码,并且检查isTouchDevice
的值的任何其他条件将给出错误结果。 AFAI模块模式应该解决这些问题。例如。我们可以使isTouchDevice
只能读取只读内容。这就是我认为模块化代码将是:
var userAgent = function() {
var TouchDevice = 'ontouchstart' in document.documentElement;
function isTouchDevice() {
return TouchDevice;
}
return { ifTouchDevice: isTouchDevice };
}();
现在,如果我想检查设备是否是触摸屏,那么我会这样做:
if(useragent.ifTouchDevice())
或if(useragent.ifTouchDevice() == 1)
现在,即使我们不加思索地改变useragent.ifTouchDevice()
,例如if(useragent.ifTouchDevice = 1)
,TouchDevice
仍将保持不变,并始终提供正确的价值。到现在为止还挺好。现在我的问题是,
if(useragent.ifTouchDevice() == 1)
来检查触摸屏设备,并认为模块模式可以节省我们的费用。然后,如果useragent.ifTouchDevice
被分配了错误的值,则检查触摸设备的所有if
条件仍然会出错。我们刚刚使TouchDevice
成为不可变但仍然useragent.ifTouchDevice
不是不可变的,并且充当可以被污染的全局变量。那么Module模式的优势是什么?