Meta
VILIC03:24 - 03.13 2011
JavaScript 实现函数重载及类的多构造函数( 6 responses )

这个是之前一篇 (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());

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

There're 5 Comments to "JavaScript 实现函数重载及类的多构造函数"
  • 宇博23:32 - 03.13 2011
    这。。。有啥意义么。。。JS的参数默认传值似乎比这个更方便。因为C#没办法使用类似JS和PHP那样的默认传参才使用函数重载,JS本身有这功能却还函数重载,似乎是,没意义。。。
    宇博
  • Vilic02:06 - 03.14 2011
    @宇博 首先, 可读性更强. 然后我主要是用到各种JS的API上, 防止传入期望外的参数. 一般的小程序自然用不到这些了, 但是东西大了, 用处就相对明显了.
    Vilic
  • 宇博11:12 - 03.14 2011
    @Vilic 你是C#用多了,可读性觉得更加顺口。但实际上函数重载没有太多的标识修饰,这也就是,程序大了,你就不好用了,容易造成混乱。当然前提是你已经习惯了C#那种模式,自然是不会觉得有何不妥。
    宇博
  • Vilic14:01 - 03.14 2011
    @宇博 呃... 其实我用JS的时间比C#的时间长得多, 这些问题也是开发的时候慢慢发现的. 可能我们开发的类型不一样, 你不能体会到我的需要. 可读性只是一点.
    Vilic
  • 宇博22:53 - 03.14 2011
    @Vilic 最近不知怎么浑身不舒服,来这里发发彪。
    宇博
Leave a Comment