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() 函数传递它以使用父道具装饰新创建的对象。
在最近的一次 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() 函数传递它以使用父道具装饰新创建的对象。