利用模块模式(函数)构造一个用来产生序列号的对象

//序列号由字母前缀和数字结尾组成 
var serial_maker = function () { var prefix = ''; var seq = 0; return { set_prefix: function (p) { prefix = String(p); }, set_seq: function (s) { seq = s; }, create_id: function () { var result = prefix + seq; seq += 1; return result; } } }; var seqer = serial_maker(); seqer.set_prefix("A");
seqer.set_seq(
1000); alert(seqer.create_id()); //A1000 alert(seqer.create_id()); //A1001 alert(seqer.create_id()); //A1002

       seqer包含的方法没有用到this或that,因此没有办法损害到seqer。除非调用对应的方法,否则没办法改变prefix和seq的值。seqer对象是可变的,所以它的方法可能会被替换掉,但替换后的方法依然不能访问私有成员。seqer就是一组函数的集合,而且那些函数被授予特权,可以访问或修改私有成员。如果我们把seqer.create_id作为一个值传递给第三方函数,那个函数能用它产生唯一字符串,但却不能通过它来改变prefix和req的值。

原文地址:https://www.cnblogs.com/yonglin/p/7474165.html