Overload 内部实现

如果你需要使用 Overload ,请参考对应的接口文档。本文档用于解释接口文档中没有提及的内部实现,但这部分实现随时可能被修改。

Overload

Overload.create()

创建重载方法入口,但不添加任何函数重载。静态的 add 方法实际上是调用了静态的 create 方法后,获得了实例再调用实例的 add 方法。

var sum = Overload.create();

sum
    .add("Number, Number",
        function(x, y) { return x + y; })

sum
    .add("Number, Number, Number",
        function(x, y, z) { return x + y + z; });

Overload.match()

根据给定的实参列表,筛选出所有类型匹配的函数重载。

var User = function(name) { this.name = name; };

var sayHello = Overload
    .add("String",
        function(string) { alert("Hello, " + string); }) 
    .add([User],
        function(user) { sayHello(user.name); })
    .add("*",
        function(object) { sayHello(object.toString()); })

alert(sayHello.match(["Cat"]).length);

Overload.select()

根据给定的实参列表,筛选出唯一一个最匹配的函数重载。如果不存在惟一一个最匹配的函数重载,则返回 null 。

var User = function(name) { this.name = name; };

var sayHello = Overload
    .add("String",
        function(string) { alert("Hello, " + string); }) 
    .add([User],
        function(user) { sayHello(user.name); })
    .add("*",
        function(object) { sayHello(object.toString()); })

alert(sayHello.select(["Cat"]));