javascript

时间:2015-12-17 14:27:26

标签: javascript computer-science object-oriented-analysis

在最近的一次JavaScript访谈中,我被问及有关重载和覆盖的问题。我知道这是Java中的一个概念:

https://softwareengineering.stackexchange.com/questions/164353/whats-the-difference-between-overloading-a-method-and-overriding-it-in-java

但JavaScript中是否存在类似内容,如果是这样,代码示例会是什么?我的理解是,重载在javascript中并不常见。你为什么需要在JS中使用“重载”?

OverRiding对我来说有点清楚 - 过度骑行的一个例子是在继承超级类的子类中,但是通过一些方法/属性为子类创建唯一的方法/属性。

4 个答案:

答案 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方法,并通过参数变量访问。这在功能上是相似的。