javascript 中的重载与覆盖

overloading vs overriding in javascript

在最近的一次 Java剧本采访中,我被问及 overloading vs overriding。我知道这是Java中的一个概念。但是 JavaScript 中是否有类似的东西,如果有,代码示例是什么?我的理解是重载在 javascript 中并不常见。为什么你需要在 JS 中使用“overloading”?

OverRiding 对我来说更清楚一些 - overriding 的一个例子是在 subclassing 中,你从一个 super class 继承,但是 over riding 一些 methods/properties 到为子 class 创建独特的。

JavaScript不支持重载。

JavaScript支持覆盖,所以如果你定义了两个同名的函数,最后一个定义的会覆盖之前定义的版本,每次调用该函数时,最后定义的那个将被执行。

更多阅读这里http://blog.mastykarz.nl/overloading-functions-javascript/

这里有一个很好的 'faking' JavaScript 函数重载示例:

你基本上在你的函数中使用一个参数,它接受一个对象,该对象包含你想要的任意数量的参数。

显然它实际上并没有超载,因为这在 JavaScript 中是不可能的。

虽然JavaScript不支持传统意义上的重载,

可以随时将多于所需的参数传递给 JavaScript 方法,并通过 arguments 变量访问。这在功能上是相似的。

javascript 中不需要传统的重载概念,因为它具有动态特性。在更传统的编程语言中,如 Java,您可以使用不同的签名多次定义一个方法,该语言将正确地使用您想要使用签名调用的方法:这称为方法重载。另一方面,覆盖是在子 class 中重新定义父 class 的方法的可能性。 要在 javascript 中进行重载,通常的做法是使用称为选项的最后一个参数。例如

function yourFunction(firstParam, secondParam, options) {};

选项只是一个 javascript 对象,其中包含您要传递的道具。然后你可以使用所谓的 "options" 模式来检查道具。 由于语言的原型性质,在纯 javascript 中进行覆盖更加困难:当您 "extend" 一个带有新对象的基础对象时,您可以使用构造函数对象的 .call() 函数传递它以使用父道具装饰新创建的对象。