5
在API设计中,何时使用/避免临时多态性?
Sue正在设计一个JavaScript库Magician.js。它的关键是Rabbit从传递的参数中拉出一个函数。 她知道它的用户可能想从a String,a Number,a Function甚至甚至是a中拔出一只兔子HTMLElement。考虑到这一点,她可以这样设计API: 严格的界面 Magician.pullRabbitOutOfString = function(str) //... Magician.pullRabbitOutOfHTMLElement = function(htmlEl) //... 上面示例中的每个函数都知道如何处理函数名称/参数名称中指定的类型的参数。 或者,她可以这样设计: “临时”界面 Magician.pullRabbit = function(anything) //... pullRabbit必须考虑该anything参数可能具有的各种不同的预期类型,以及(当然)意外类型: Magician.pullRabbit = function(anything) { if (anything === undefined) { return new Rabbit(); // out of thin air } else if (isString(anything)) { // more } else if (isNumber(anything)) …