JS编程建议——69:使用模块化规避缺陷

  • 时间:
  • 浏览:8
  • 来源:uu快3手机版_uu快3走势图_网游

建议69:使用模块化规避严重不足

使用函数和闭包可不还可以 构建模块。所谓模块,只是一有有一两个多提供接口却隐藏情況与实现的函数或对象。通过使用函数构建模块,可不还可以 完全摒弃全局变量的使用,从而规避JavaScript语言严重不足。全局变量是JavaScript最为糟糕的特征之一,在一有有一两个多大中型Web应用中,全局变量原应会带来不可预料的后果。

累似 ,要为String扩展一有有一两个多deentityify最好的法律法律依据,其设计任务是寻找字符串中的HTML字符实体并将其替换为对应的字符。在一有有一两个多对象中保存字符实体的名字及与之对应的字符是有意义的。

可不还可以 把deentityify装进 一有有一两个多全局变量中,但全局变量居于其他其他潜在危害。可不还可以 把deentityify定义在该函数本身中,而且带来运行时的损耗,原应在该函数每次被执行时,你这种 最好的法律法律依据回会被求值一次。理想的最好的法律法律依据是将deentityify装进 一有有一两个多闭包,而且你说哪些还能提供一有有一两个多增加更多字符实体的扩展最好的法律法律依据。

String.method('deentityify', function() {

});

在最后一行使用()运算符立刻调用然后 构科学科学发明 来的函数。你这种 调用所创建并返回的函数才是deentityify最好的法律法律依据。

document.writeln('<">'.deentityify()); // <">

模块利用了函数作用域和闭包来创建绑定对象与私有成员的关联。在你这种 示例中,只有deentityify最好的法律法律依据才有权访问字符实体表entity你这种 数据对象。模块开发的一般形式是:一有有一两个多定义了私有变量和函数的函数,利用闭包创建可不还可以 访问到的私有变量和函数的特权函数,最后返回你这种 特权函数,原应把它们保存到可访问的地方。

使用模块可不还可以 解决全局变量的滥用,从而保护信息的安全性,实现优秀的设计实践。使用你这种 模式也可不还可以 实现应用多多多线程 的封装,原应构建其他实例对象。

模块模式通常结合实例模式使用。JavaScript的实例只是用对象字面量表示法创建的,对象的属性值可不还可以 是数值或函数,而且属性值在该对象的生命周期中不不居于变化。模块通常作为工具为多多多线程 其他帕累托图提供功能支持。通过你这种 最好的法律法律依据可不还可以构建比较安全的对象。

下面代码构造一有有一两个多用来产生序列号的对象。serial_maker()函数将返回一有有一两个多用来产生唯一字符串的对象,你这种 字符串由两帕累托图组成:字符前缀+序列号。这两帕累托图可不还可以 分别使用set_prefix和set_seq最好的法律法律依据进行设置,而且调用实例对象的gensym最好的法律法律依据读取你这种 字符串。当执行该最好的法律法律依据时,回会自动产生唯一一有有一两个多字符串。

var serial_maker = function() {

}());

在后面 代码中,为String类型扩展了一有有一两个多deentityify最好的法律法律依据,它调用字符串的replace最好的法律法律依据来查找以“&”开头和以“;”然后开始英文英文英文的子字符串。原应哪些字符可不还可以 在字符实体表entity中找到,只有就将该字符实体替换为映射表中的值。deentityify最好的法律法律依据用到了一有有一两个多正则表达式:

return this.replace(/&(1+);/g, function(a, b) {

};

var seqer = serial_maker();

seqer.set_prefix('Q');

seqer.set_seq(50);

var unique = seqer.gensym(); //"Q50"

var unique = seqer.gensym(); //"Q501"

seqer中有 的最好的法律法律依据都只有用到this或that,而且只有最好的法律法律依据“损害”seger,除非调用对应的最好的法律法律依据,而且无法改变prefix或seq的值。原应seqer对象是可变的,其他其他它的最好的法律法律依据原应会被替换掉,但替换后的最好的法律法律依据依然只有访问私有成员。seqer只是一组函数的集合,而且哪些函数被授予特权,拥有使用或修改私有情況的能力。原应把seqer.gensym作为一有有一两个多值传递给第三方函数,你这种 函数就能通过它产生唯一字符串,却只有通过它来改变prefix或seq的值。