原创转载请注明出处:http://agilestyle.iteye.com/blog/2341742
Function Overloading
A function signature is made up of the function name plus the number and type of parameters the function expects. JavaScript functions can accept any number of parameters, and the types of parameters a function takes aren’t specified at all. That means JavaScript functions don’t actually have signatures. A lack of function signatures also means a lack of function overloading. For example:
function sayMessage(message) { console.log(message); } function sayMessage() { console.log("Default message"); } sayMessage("Hello!"); // outputs "Default message"
In JavaScript when you define multiple functions with the same name, the one that appears last in your code wins.The earlier function declarations are completely removed, and the last is the one that is used. Once again, it helps to think about this situation using objects:
var sayMessage = new Function("message", "console.log(message);"); sayMessage = new Function("console.log(\"Default message\");"); sayMessage("Hello!"); // outputs "Default message"
Looking at the code this way makes it clear why the previous code didn't work. A function object is being assigned to sayMessage twice in a row, so it makes sense that the first function object would be lost.
The fact that functions don't have signatures in JavaScript doesn't mean you can't mimic function overloading. You can retrieve the number of parameters that were passed in by using the arguments object, and you can use that information to determine what to do. For example:
function sayMessage(message) { if (arguments.length === 0) { message = "Default message"; } console.log(message); } sayMessage("Hello!"); // outputs "Hello!"
Note:
In practice, checking the named parameter against undefined is more common than relying on arguments.length.
Reference
Leanpub.Principles.of.Object-Oriented.Programming.in.JavaScript.Jun.2014
相关推荐
JavaScript函数重载是编程中的一个概念,它允许在同一个作用域内定义同名但参数不同的函数。在许多静态类型语言中,如C++或Java,函数重载是通过不同的参数列表来实现的,编译器会根据传入的参数类型和数量自动选择...
在JavaScript中,函数(function)本质上是一种特殊的对象,我们称之为Function对象。它不仅可以像其他对象一样拥有属性和方法,还可以被赋值给变量,或者作为参数传递给其他函数。因此,JavaScript中的函数非常灵活...
在JavaScript中,多态主要通过函数重载(Function Overloading)或者使用回调函数和事件驱动编程来实现。 在JavaScript中,创建类和对象有两种基本方式: 1. 使用构造函数和原型(Prototypes): ```javascript ...
在传统的面向对象编程语言如Java或C++中,重载(Overloading)是一种常见的特性,它允许开发者在同一作用域内定义多个同名但参数列表不同的方法。然而,在JavaScript这种动态弱类型的语言中,并没有原生支持重载这一...
5. **Syntactic Macros and Operator Overloading**: Explains advanced language features like macros and operator overloading, which can enhance the expressiveness of JavaScript code. #### Further ...
在JavaScript中,多态主要是通过函数重载(function overloading)来实现的。但由于JavaScript是一种弱类型语言,并不直接支持函数重载。然而,可以通过其他方式来模拟多态性,比如使用对象的类型检测,或者利用鸭子...
尽管如此,构造器可以被重载Overloading,即创建多个具有相同名称但参数不同的构造函数。 构造器的使用通常伴随着`new`关键字,它用来创建一个新的对象实例。例如,我们可以定义一个名为`Car`的构造函数,接收`...
在面向对象编程中,重载(Overloading)是一种在同一个作用域内可以声明几个功能类似的同名函数,但是它们的参数类型、个数或顺序不同的函数机制。重载的主要目的是提供给调用者不同的函数接口,使得程序更加灵活,...
2. **无函数重载**:与一些面向对象语言不同,JavaScript不支持传统的函数重载(overloading),即不能在同一个作用域内定义多个同名但参数不同的函数。 3. **Function对象**:JavaScript提供了一个内置的`Function...
- TypeScript还支持类型断言(explicit casting)、函数重载(function overloading)和联合类型(union types)。 这本书将帮助读者掌握TypeScript的全部特性和最佳实践,进而能够高效地开发企业级的大型应用程序...
在Java中,函数的重载(Overloading)是指在同一个类中可以有多个同名函数,但它们的参数列表不同(参数类型、数量或顺序不同),每个函数都有自己的独特功能。而函数的覆盖(Overriding)则是子类重写父类中的方法...
4. 函数重载(Function Overloading):TypeScript允许函数具有多个签名,根据传入的参数类型执行不同的逻辑。 5. 泛型(Generics):泛型是一种在编写可复用代码时保持灵活性的方式,可以确保类型安全。例如,创建...
函数重载(Function Overloading)是编程语言中的一项特性,允许在同一作用域内声明多个同名函数,但这些函数的参数列表不同,可以是参数个数、类型或顺序的差异。这样,调用同一个函数名时,会根据传递的参数自动...
在Web服务中,功能重载(Function Overloading)是一种编程技术,允许在同一作用域内定义多个同名函数,但每个函数具有不同的参数列表。这种技术在面向对象编程中广泛使用,包括C#、Java等语言。在Web服务的上下文中...
6. 函数重载(Function Overloading): TypeScript允许函数有多个签名,这意味着函数可以根据传入参数的类型执行不同的逻辑。这对于实现多态行为非常有用。 7. 可选链(Optional Chaining)和空值合并操作符...
函数重载(Function Overloading) TypeScript允许函数有多个签名,以便在不同情况下有不同的行为。这对于文档清晰和编译时的类型检查很有帮助。 ```typescript function greet(name: string): string; function ...
参数化简单的js库,可通过javascript函数实现即席多态性。 具有相同名称的重载函数使用不同的参数类型,因此使它们根据输入参数的不同而求值。 (可选)您可以使其充当类型检查器,并在未定义的签名上引发错误。如何...
在JavaScript编程中,重载(overloading)是一个重要但不常讨论的话题。由于JavaScript不是传统意义上的面向对象编程语言,所以它本身并不直接支持方法重载这一特性。不过,通过一些编程技巧,我们可以在某种程度上...