javascript中的重载与重写

javascript中的重载与重写,javascript,node.js,computer-science,object-oriented-analysis,Javascript,Node.js,Computer Science,Object Oriented Analysis,在最近的一次JavaScript采访中,我被问及。我知道这是Java中的一个概念。但是JavaScript中有类似的东西吗?如果有,代码示例是什么?我的理解是,重载在javascript中并不常见。为什么需要在JS中使用“重载” 重写对我来说更清楚一点——过度使用的一个例子是在子类化中,您从一个超类继承,但过度使用一些方法/属性来为一个子类创建唯一的方法/属性 JavaScript不支持重载 JavaScript支持重写,因此如果您使用相同的名称定义了两个函数,那么最后定义的函数将重写先前定义的

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


重写对我来说更清楚一点——过度使用的一个例子是在子类化中,您从一个超类继承,但过度使用一些方法/属性来为一个子类创建唯一的方法/属性

JavaScript不支持重载

JavaScript支持重写,因此如果您使用相同的名称定义了两个函数,那么最后定义的函数将重写先前定义的版本,并且每次调用该函数时,最后定义的函数都将被执行


更多信息请阅读此处

这里有一个很好的“伪造”JavaScript函数重载示例:

基本上,在函数中使用一个参数来获取一个对象,该对象包含任意数量的参数


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

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


任何时候都可以将超过所需的参数传递给JavaScript方法,并通过arguments变量进行访问。这在功能上是相似的。

javascript中不需要传统的重载概念,因为它是动态的。在更传统的编程语言(如Java)中,您可以使用不同的签名多次定义一个方法,并且该语言只需使用签名即可正确使用您想要调用的方法:这称为方法重载。另一方面,重写是在子类中重新定义父类的方法的可能性。 要在javascript中重载,通常的做法是使用最后一个名为options的参数。比如说

function你的函数(firstParam,secondParam,options){}

选项只是一个javascript对象,其中包含您想要传递的道具。然后你可以使用所谓的“选项”模式来检查道具。
由于语言的原型性质,在纯javascript中进行重写更加困难:当您使用新对象“扩展”基础对象时,您可以使用.call()构造函数对象的函数,通过此函数用父类道具装饰新创建的对象。

重载在JavaScript中与其他语言的方式不同。你被问到了什么?基本上是为了解释差异。在一家从Java向NodeJSDon过渡的公司,我们不能从Java开发人员的经典OOP角度来解决这个问题。Javascript与Java不同,它不是OOP,它是典型的继承。据我所知,除了没有重载之外,Javascript根本不支持重载-对输入参数的数量或顺序没有限制,因此只能存在一个具有特定名称的方法。通过原型继承支持重写。嗯,这不是真的。Javascript没有以“规范”的方式处理它,但是Javascript中有许多模式可以处理重载。作为一名优秀的javascript程序员,处理这些问题很重要。@Maksim我确信JS不支持重载。。在JS中,函数只是另一个对象,因此变量只是对该对象的引用。当您重新分配该变量时,对该变量的引用将丢失,并且该对象将被GCed。。新函数在某种程度上替代了实际函数,但没有覆盖实际函数。。在重写对这两个函数的引用时,应该只存在不同的作用域。我说没有重载,但有些模式在功能上有相似之处。比如说选项模式。当然,函数是一个对象,javascript不会使用签名“跟踪”函数,而只是使用var名称。重载只是处理传递给函数的不同类型的算术或数据类型的方法。因此,javascript中确实存在重载,但它是使用模式完成的,而不是语言中的本地模式。