JavaScript 面向对象编程:类、类型与实用技巧
1. 构造函数与无名函数定义表达式
在 JavaScript 中,使用无名函数定义表达式作为构造函数时, getName()
方法会返回空字符串。例如:
// 这个构造函数没有名称
var Complex = function(x,y) { this.r = x; this.i = y; }
// 这个构造函数有名称
var Range = function Range(f,t) { this.from = f; this.to = t; }
2. 鸭子类型(Duck-Typing)
在客户端 JavaScript 中,上述确定对象类别的技术并非毫无问题。鸭子类型提供了一种绕过这个问题的方法,即不问“这个对象属于哪个类?”,而是问“这个对象能做什么?”
鸭子类型源于这样的表述:“当我看到一只走路像鸭子、游泳像鸭子、叫声像鸭子的鸟时,我就称它为鸭子。”对于 JavaScript 程序员来说,这意味着“如果一个对象能像鸭子一样走路、游泳和嘎嘎叫,那么即使它不是从鸭子类的原型对象继承而来,我们也可以将其当作鸭子来对待”。
以下是鸭子类型的一些示例:
- Range 类 : Range
类的构造函数不检查其参数是否为数字,仅假设它们是可比较的。 includes()
方法使用 <=
运算符,适用于任何可以通过关