是否值得使用javascript中的模块模式?

时间:2016-11-08 13:57:48

标签: javascript oop module prototype

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模式的优势是什么?

0 个答案:

没有答案