JavaScript 轻松实现强大的Cookies操作

刚刚群里有人问到JavaScript的Cookies操作, 于是想到之前也写过一个, 刚刚一搜, 是去年8月份的事情了… 不过功能还算不错, 而且使用方便, 于是整理一下, 献上:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
    <title></title>
    <script src=”http://www.vilic.info/vejis/vejis.1.0.0.js” type=”text/javascript”></script>
    <script src=”http://www.vilic.info/vejis/cookies.1.0.0.js” type=”text/javascript”></script>
    <script type=”text/javascript”>
        /*
        cookies[String name] 获取cookies集合中名为name的Cookie的值.
        cookies.clear() 清除所有Cookie, 并更新cookies集合, 无返回值.
        cookies.del(String name) 删除相应名称的Cookie, 并更新cookies集合, 无返回值.
        cookies.del(Array names) 批量删除相应名称的Cookie, 并更新cookies集合, 无返回值.
        cookies.get(String name) 更新cookies集合, 获取相应名称的Cookie的值, 返回值为String.
        cookies.refresh() 更新cookies集合, 无返回值.
        cookies.set(String name, String value) 设置相应名称的Cookie的值, 并更新cookies集合, 无返回值.
        cookies.set(String name, String value, Date date) 设置相应名称的Cookie的值与过期时间, 并更新cookies集合, 无返回值.
        cookies.set(Array names, Array values) 批量设置相应名称的Cookie的值, 并更新cookies集合, 无返回值.
        */

        if (cookies[“abc”] == undefined) {
            alert(“set cookie”);
            cookies.set(“abc”, “123”);
        }

        alert(cookies[“abc”]);
    </script>
</head>
<body>

</body>
</html>

相关文件:
http://www.vilic.info/vejis/vejis.1.0.0.js
http://www.vilic.info/vejis/cookies.1.0.0.js

JavaScript 实现函数重载及类的多构造函数

这个是之前一篇 (http://www.vilic.info/blog/archives/610) 的升级版, 添加了更强的对 “类” 的支持, 取消了Null类型, 顺便修正了一些bug.

脚本链接: http://www.vilic.info/vejis/vejis-mo.js

然后是用法:

/* 函数的用法 */

//创建一个函数并定义重载1
//这里也可以使用 var fn = _(); 创建空函数, 并在以后添加重载
var fn = _(function () {
    alert(“No arguments!”);
});

//重载2
fn._(String, function (str) {
    alert(“You got me a string: ” + str + “.”);
});

//重载3
fn._(String, Integer, function (str, n) {
    alert(“The string is: ” + str + “; and the integer is: ” + n + “.”);
});

fn();
fn(“test1”);
fn(“test2”, 123);

/* 类的用法 */
//定义一个类
var C = class_(function () {
    var x;

    //成员函数
    this.getX = _(function () {
        return x;
    });

    /* 也可无构造函数 */
    //构造函数重载1
    C._(Integer, function (i) {
        x = “Integer: ” + i;
    });

    //构造函数重载2
    C._(String, function (s) {
        x = “String: ” + s;
    });
});

//创建两个C的实例
var c1 = new C(“abc”);
var c2 = new C(123);

alert(c1.getX());
alert(c2.getX());

Vibot 2011.3.10

I don’t know if this moment should be called too late or too early…

After hours’ work, I have finally made the outline-searching algorithm for a formatted map. I know it cannot be called difficult to many programmers, even not for me. But the feelings are good, cause I don’t write this kind of code usually.

I thought about how to find the right route efficiently for sometime, and came out with this solution. Firstly find the possible part of the whole outline, and… enumerate every point on it… I don’t really like enumeration, cause it always means inefficiency. But sometimes you know, It’s unavoidable.

So, I really need to go to sleep now.

Hope me a nice day after waking up!

Vibot 2011.3.7

I formally started my robot project today. And when I was about to write this post, I got the project a temporary name, Vibot.

I don’t have a very good skill on algorithm, so I am beginning with a relatively simple thing — find an available route on a formatted map. I have thought for a while, and come out with a seemly simple solution. I’ve no idea if it will be easy to make it via CODE…

And by the way, I really think the most useful skill on mathematic for these kinds of algorithms is Geometry.

Best wishes to myself!

IE 搜索引擎被劫持

今天突然发现IE的搜索引擎又被劫持到了百度联盟… 然后很不爽地发现, 那串url非常眼熟, 又是用utf8xxx的形式, 想把劫持者的联盟账号伪装成编码, 以骗过广大人民… 因为之前遇到过, 就很自然地联想到了Qvod Player… 大家懂的. 这款软件通过添加一款IE插件来达到劫持的目的, 所以只要禁用相关插件就可以了. 之前一次, 好像叫Qvod Extend, 不过这次更猛, 直接挂上了Baidu的名号… 弄得我找了半天才找到.
插件名称是{xxxx-xxx-xxx…}这种形式的, 大家找找看, 禁用掉应该就可以了~

极性空间假说

突然发现博客者访问不少是通过搜索 “极性空间假说” 来的. 但是我的博客里却没有一篇写极性空间假说的文章, 于是起笔写一个.

这个假说的想法是高二时候的, 现在看来有很多地方思考得不够深入, 但重点在想法.

极性空间假说是以解释各种力的产生为目标的. 因为现在还在最初最初的阶段, 没有什么严密的逻辑和结论, 更多的是一种想法, 不过我想也不能归于 “民科”. 于是为了解释这种想法, 还得回到最开始灵感的产生.

这是一个关于磁场的故事. 安培定则大家一定知道, 初中高中的时候, 很多同学都经常使用它来判断磁极的方向. 而我一向不喜欢记各种东西, 于是就使用了另一个与安培定则等效, 但却更好记的方法. 将缠有通电线圈的铁芯的一端对准自己, 看电流的方向, 如果是顺时针(Shun), 那么对着自己的一端就是南极(S), 反之, 如果是逆时针(Ni), 那么对着自己的一端就是北极(N). 正好 “顺” 和 “逆” 两个字的拼音首字母就是S和N, 于是记起来就很方便了.

为什么要说这一点呢? 如果大家知道向量的外积, 会了解其中有个方向是人为定义的. 因为我主观上认为, 世界的规律应该是对称的. 为什么只是顺时针和逆时针的差异就导致了N和S的不同? 个人来讲, 我不愿意接受这样的结论, 我相信南北极是等价的, 他们或许并不是 “极”. 现在回到我之前判定南北极的方法, 如果我们把两个磁极放到一起, 看看当相斥或者相吸时两边电流的关系, 很显然, 当相斥时, 两边电流方向相反, 相吸时, 方向相同.

我个人认为这才是南北极的真正原因. 当然, 如果哪天科学家确认找到了磁单极子, 那么我的理论也就破灭了…

那, 这之间又是什么在作用呢? 我个人认为是空间, 而且不止一重空间. 这里有一些假设, 很不幸的是假设很多… 我认为空间是物质存在的基础, 物质必须存在与空间之中, 而不同的物质需要存在与不同的空间之中, 正物质存在于正空间, 负物质存在于负空间 (除此之外, 应该还有其他空间, 只是正负空间, 或我称之为α/β空间, 我们认知得更多), 并且处于同一处的空间的密度(注: 空间密度, 即各种空间在某处的相对值)有趋于相同的趋势. 比如现在在某处, 同时存在着正空间和负空间, 它们各自在一边多, 一边少, 在没有其他影响的前提下, 它们会逐步变为更平均的密度.

另外还有空间的分类, 如膨胀系, 收缩系… 就不说了, 我自己都还没想明白. 关于这个假说, 也很久没有继续思考过了… 一切都停留在了过去, 不过以后闲暇的时候, 还是打算继续完善. 民科就民科吧…

这个无所谓存在的宇宙

本来想用英文写的, 怕自己表达无力, 还是用中文吧.

这些都是最近自己的想法, 当然, 现在我对这些想法深信不疑. 东西很消极, 大家请别觉得我神经, 其实觉得也无所谓.

首先需要说明的是, 我信仰无神论和决定论. 无神论好理解, 决定论也就是我不相信自由意志的存在, 觉得一切从一开始就已经注定了. 注意注定的是每一个细节, 包括你我此刻在想什么, 以后会想什么.

我从小就想知道, 这个宇宙的本质是什么, 我想现在我自己已经大致了解了宇宙是什么, 虽然我所猜测的东西没有任何实用价值. 这不是关于什么物理定律, 也不是关于造物主. 或者它更应该是一个哲学上的问题.

我的答案是, 宇宙存在, 也不存在, 需要注意的是, 这里及后文的 “宇宙” 是指最根本的, 不是指我们的世界 (包括外太空什么的). 因为宇宙本身并无任何属性与规律, 甚至没有真与假, 存在与不存在之分.

所以我们又算什么? 我们能感受到的一切, 难道都是假的吗? 之前我说过, 宇宙本身是没有真与假之分的, 所以按说不能给我们是真还是假一个答案. 但是为了方便理解, 请先认定, 我们都是假的.

这真的是一个难以接受的想法, 我非常理解. 我还是继续说吧. 不仅是我们, 还有我们生存的世界, 地球, 太阳系, 银河系… 它们都存在, 但也都不存在. 最后更深一层的, 我们所在的这个世界的规律, 它们存在, 也不存在.

对于我自己的想法而言, 这里已经到达了核心. 即, 我们目前所感知的一切 “存在”, 都是建立在我们所 “存在” 的这个世界的规律之上的. 而这些存在却不存在的规律, 对于我们, 就是一切. 我想如今物理学所探讨的, 也就是这些存在却不存在的规律吧.

想到了佛家的一句话 “色即是空, 空即是色”. 对于这个宇宙, 有即是无, 无即是有. 因为宇宙本身是一切, 同时它也什么都不是. 如之前所说: “宇宙本身并无任何属性与规律”, 我们此刻说, 宇宙是存在的, 其实不然, 有发现自己犯了一个什么错误吗? 说宇宙存在, 是把我们所存在 (这里使用存在, 我想应该是正确的) 的这个世界中物质的一个属性 (存在或不存在) 加在了一个没有这个属性的东西 (或许这里也不能称作是东西) 上.

就说到这儿吧, 我想能理解的人已经理解了, 不能理解的想理解也不容易了…

JavaScript for…in 语句的最佳用法

大家对JavaScript里的for…in语句一定不陌生吧, 不过, 这个语句有时会做一些我们可能不想它做的事. 比如:

Object.prototype.test = function () { };

var obj = {
    a: “aaa”,
    b: “bbb”
};

//需要说明的一点是, 这里的i类型为string, 即使是对于数组, 也同样如此.
for (i in obj)
    alert(obj[i]);

结果发现test方法也跑出来. 为了避免这样的情况, 我们通常做简单的处理:

for (i in obj)
    if (typeof obj[i] != “function”) 
        alert(obj[i]);

不过如果枚举的类型里也有function呢? 所以, 提出我认为的最佳方案:

for (i in obj)
    if (obj.constructor.prototype[i] === undefined)
        alert(obj[i]);

JavaScript完美实现函数重载

今天Google了一下JS的函数重载, 居然没有发现自己的文章, 结果在博客内搜索了下, 才发现是SEO的问题.

于是, 在这里贡献出暑假的时候写的JS函数重载, 其实它本身是自己的类库vejis的一部分, 不过vejis估计短时间内不会完善了, 所以现在把代码单独提出来, 供大家使用. 至少这是目前我见过的最爽的JS函数重载.

先看示例代码:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>

<html xmlns=”http://www.w3.org/1999/xhtml“>
<head>
    <title>JavaScript完美实现函数重载</title>
    <script src=”vejis-mo.js” type=”text/javascript”></script>
    <script type=”text/javascript”>
        /*
            这个函数重载代码是vejis库的一部分, 现在单独提取出来分享.
            vejis命名空间下有两个特殊的类型, Integer和Null, 在调用vejis.use(vejis)后即可直接使用.
        */

        /*
            使用vejis命名空间, 将目标对象的方法和属性拷贝到window对象, 第二个参数可选, 指示是否覆盖.
            Method, _等都是vejis的成员.
        */

        vejis.use(vejis, true);

        //定义一个方法
        var test = new Method();
       
        //重载, 1个String类型的参数
        test.overload(String, function (msg) {
            alert(msg);
        });
       
        //重载, 1个Integer类型的参数
        test.overload(Integer, function (n) {
            alert(“The integer given is ” + n + “.”);
        });

        test(“Hello, Vejis!”);
        test(57);

        //以下为简写
        var test2 = _(function () {
            alert(“No arguments given.”);
        });

        test2._(Object, String, function (obj, str) {
            alert(“You’ve given me a Object and a String!”);
        });

        //自定义的类型
        test2._(MyClass, function (mc) {
            alert(mc.description);
            mc.sayHello();
        });

        test2();
        test2({}, “”);
        test2(new MyClass());

        function MyClass() {
            this.description = “This is my class.”
            this.sayHello = _(function () {
                alert(“Hello! I am MyClass!”);
            });
        }
    </script>
</head>
<body>
</body>
</html>

木哈哈, 是不是很爽~ 其实这里不止可以实现JS重载普通的函数, 还可以重载类型, 慢慢发掘吧~

脚本在这里, 当然, 因为只是提取的函数重载部分, 其他的我能删的都删了:

http://www.vilic.info/vejis/vejis-mo.js

2011.3.13 文件有改动, 详见: http://www.vilic.info/blog/archives/638

The Two Possibilities

(This article is partly the same with a previous one)
I have thought about the producing of consciousness for a long time. And days ago, I got an important inspiration from a common sense: we cannot remember anything that happened when we were too young, at generally less than 3 years old. But why?
I think there are two possibilities. And either of them has the same necessary condition —- we can feel ourselves. Just try to remember anything that’s without your consciousness. But I guess you can’t.
So, get back to the possibilities.
The first one is that our memory system might not be powerful enough to “record” our consciousness when we are too young. So, even if the things happened are recorded, our consciousness are not, one can never remember a thing recorded without our consciousness.
And the second one, which I believe is the truth, the very young human beings have not got clear consciousness cause the regular activities in our brain is not complex enough (I believe regular activities of anything can produce consciousness) to produce clear consciousness.