Meta
VILIC01:31 - 08.16 2010

Version: 0.0.0.3

再次改进了重载算法. 然后开始各种杂项的开发, 比如string, array命名空间. 其中部分有enhance方法, 用于加强相应的原型.

之前创建可重载的函数时, 是通过函数内部创建之后return的. 但是一直想使用类似new的方法. 今天也算巩固了下之前很久听说过的一个知识:

function Test() {
    return fn;
    function fn() {
        alert('Test OK!');
    }
}

var test = new Test();
test();

你认为上面的代码能弹出 "Test OK!" 吗? 答案是可以的. 但是这个时候, test instanceof Text == false. 也就是说, test此时并非Test的实例, 而是一个function(){}.

在vejis里, 虽然我最终用类似的方法实现了new Method的操作, 但得到的方法也并非Method的实例:

vejis.use(vejis, true); //使用vejis命名空间, 并且覆盖已有的方法和属性.

var test = new Method(); //创建一个可重载的方法.
test.overload(function(){ //添加一个无参数的重载.
    alert('Test');
});

test(); //执行test方法.
alert(test instanceof Method); //结果是false;

另外还有包含了JSON2.js文件, 准备起床之后实现简单的AJAX函数, 我看着JQuery的, 头晕啊. 太有跳跃性了. 没打算做得它那么全, 满足我日常使用即可.

Original link of this archive: http://www.vilic.info/blog/archives/502
本文的原始链接: http://www.vilic.info/blog/archives/502

VILIC01:49 - 08.15 2010

Version: 0.0.0.2

更改了函数重载的实现, 将原来的字符串变成了类, 扩展性更强. 见下面的MyClass.

vejis.use(vejis, true);

var test = _();

test._(Integer, function (n) {
    alert('Integer: ' + n);
});

test._(MyClass, function (obj) {
    obj.alert();
});

var obj = new MyClass();
test(18);
test(obj);

function MyClass() {
    this.alert = function () {
        alert('It\'s a new Class!');
    };
}

Original link of this archive: http://www.vilic.info/blog/archives/497
本文的原始链接: http://www.vilic.info/blog/archives/497

VILIC17:44 - 08.14 2010

Version: 0.0.0.1

选择的是BSD协议. 现在有接近200行了. 主要功能是createFunction. 下面来一段演示的代码:

vejis.use(vejis, true);

var test = createFunction();

test._('string', function (name) {
    alert('name: ' + name);
});

test._('int', function (age) {
   alert('age: ' + age);
});

呵呵, 看出来了吧, 函数重载. 不过在这个简单的例子上, 你可能觉得有点多余, 看看这个, 这个是vejis里的一个函数, 有4个重载:

var argsCountError = this.argsCountError = createFunction();

argsCountError._('integer', function (count) {
   if (arguments.callee._caller.arguments.length != count)
      error('The method needs ' + count + ' argument' + (count > 1 ? 's.' : '.'));
});

argsCountError._('integer, integer', function (least, most) {
   if (least >= most) error('"least" must be smaller than "most"');
   var count = arguments.callee._caller.arguments.length;
   if (count < least) error('The method needs at least ' + least + ' argument' + (least > 1 ? 's.' : '.'));
   if (count > most) error('The method needs at most ' + most + ' argument' + (most > 1 ? 's.' : '.'));
});

argsCountError._('null, integer', function (least, most) {
   arguments = arguments.callee._caller.arguments;
   least = 0;
   argsCountError(least, most);
});

argsCountError._('integer, null', function (least, most) {
   arguments = arguments.callee._caller.arguments;
   most = 25;
   argsCountError(least, most);
});

目前为止, 变量类型支持string, number, number:integer, boolean, object, object:array, object:null, function, 考虑到不同人的习惯, integer和boolean分别可以简写作int和bool. 个人觉得在函数重载很多, 而调用次数不多(其实只要不是大数量的枚举, 遍历什么的, 都不算多)时, 这个功能是非常实用的.

另外vejis.use(namespace, overwrite)也是个比较实用的东西, 虽然目前功能还非常简单, 但以后会慢慢增强.

其他的很弱, 也没什么特色了. 慢慢来.

Original link of this archive: http://www.vilic.info/blog/archives/488
本文的原始链接: http://www.vilic.info/blog/archives/488