欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

12306刷新间隔引发的抢票问题 12306抢票全局变量模式javascript

程序员文章站 2022-04-09 17:50:21
...
    进入12306订票页面,默认的刷新间隔时间是5s(5000ms),页面虽没有提供修改间隔的功能,但通过运行:
autoSearchTime=1000

    可以将间隔时间修改为任意自己想要的值(如:1s),从而简单实现刷票。原因在于autoSearchTime是全局变量,通过控制台便可以任意的修改(甚至可以通过脚本实现刷新的调用)。如此,神马抢票软件、抢票浏览器都是浮云,何必冒着泄露隐私给第三方的风险去安装不必要的软件呢?
    其实,JS完全可以避免使用全局变量,虽然没有提供private关键字,但已有不少成熟的模式实现变量的私有性:
    1、构造函数方式:
function Gadget () {
    var name = 'iPod';
    this.getName = function () {
        return name;
    }
}
var toy = new Gadget();

    name便是私有变量,无法通过toy.name访问。
    2、对象私有性:
var myobj = (function () {
    //私有成员
    var name = 'my, oh my';
    return {
        getName: function () {
            return name;
        }
    };
}());
myobj.getName();

    即使用闭包的方式访问局部变量,该方式同时也是“模块模式”的基础框架。
    3、构造函数方式改进(使用原型):
function Gadget () {
    var name = 'iPod';
    this.getName = function () {
        return name;
    }
}
Gadget.prototype = (function () {
    var browser = 'Mobile Webkit';
    return {
        getBrowser: {
            return browser;
        }
    };
}());
var toy = new Gadget();
console.log(toy.getName());
console.log(toy.getBrowser());

    该方式避免了每次调用构造函数时重新创建私有成员,实现多个实例之间的数据共享。

    此外,更为合理的方式是采用模块模式,具体介绍见《JavaScript模式》P99~P103
    注,以上例子出自该书P94~P99。