在最近的一次JavaScript访谈中,我被问及有关重载和覆盖的问题。我知道这是Java中的一个概念:
但JavaScript中是否存在类似内容,如果是这样,代码示例会是什么?我的理解是,重载在javascript中并不常见。你为什么需要在JS中使用“重载”?
OverRiding对我来说有点清楚 - 过度骑行的一个例子是在继承超级类的子类中,但是通过一些方法/属性为子类创建唯一的方法/属性。
答案 0 :(得分:6)
JavaScript不支持重载。
JavaScript支持覆盖,因此如果您定义两个具有相同名称的函数,则定义的最后一个函数将覆盖先前定义的版本,并且每次调用该函数时,最后定义的函数将被执行。
更多信息请阅读http://blog.mastykarz.nl/overloading-functions-javascript/
答案 1 :(得分:3)
这里有一个很好的'伪造'JavaScript函数重载的例子:https://stackoverflow.com/a/457589/2754135
你基本上在函数中使用一个带有对象的参数,该对象包含你想要的任意数量的参数。
它实际上并没有明显超载,因为这在JavaScript中是不可能的。
答案 2 :(得分:3)
由于其动态特性,javascript中不需要传统的重载概念。在更传统的编程语言中,作为Java,您可以使用不同的签名多次定义方法,并且语言将使用签名正确使用您想要调用的方法:即调用方法的重载。另一方面,override可以重新定义子类中父类的方法。 要在javascript中执行重载,通常的做法是使用名为options的last参数。例如
function yourFunction(firstParam, secondParam, options) {};
这些选项只是一个javascript对象,它包含你想传递的道具。然后你可以使用所谓的"选项"模式来检查道具。 要做到覆盖它在纯JavaScript中更难,因为语言的原型性质:当你"扩展"一个带有新对象的基础对象,你可以使用构造函数对象的.call()函数来传递它来用父道具来装饰新创建的对象。
答案 3 :(得分:1)
虽然JavaScript不支持传统意义上的重载,但
可以在任何时候将所需的参数传递给JavaScript方法,并通过参数变量访问。这在功能上是相似的。