zoukankan      html  css  js  c++  java
  • 利用模块模式(函数)构造一个用来产生序列号的对象

    //序列号由字母前缀和数字结尾组成 
    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的值。

  • 相关阅读:
    Do I Have an RNG(Random Number Generator)?
    网页上判断屏幕分辨率
    〖005〗数据监控
    How to use Emerge
    〖006〗开发语言
    Build patched kernel
    GNAP 1.5.1
    五一长假日记(1)
    SQL Server各种日期计算方法
    HOWTO Design your own Framebuffer Splash
  • 原文地址:https://www.cnblogs.com/yonglin/p/7474165.html
Copyright © 2011-2022 走看看