多态

当你调用一个对象的String函数(将一个值转换为一个字符串)时,它会调用该对象的toString方法来尝试从它创建一个有意义的字符串。 我提到一些标准原型定义了自己的toString版本,因此它们可以创建一个包含比"[object Object]"有用信息更多的字符串。 你也可以自己实现。

  1. Rabbit.prototype.toString = function() {
  2. return `a ${this.type} rabbit`;
  3. };
  4. console.log(String(blackRabbit));
  5. // → a black rabbit

这是一个强大的想法的简单实例。 当一段代码为了与某些对象协作而编写,这些对象具有特定接口时(在本例中为toString方法),任何类型的支持此接口的对象都可以插入到代码中,并且它将正常工作。

这种技术被称为多态(polymorphism)。 多态代码可以处理不同形状的值,只要它们支持它所期望的接口即可。

我在第四章中提到for/of循环可以遍历几种数据结构。 这是多态性的另一种情况 - 这样的循环期望数据结构公开的特定接口,数组和字符串是这样。 你也可以将这个接口添加到你自己的对象中! 但在我们实现它之前,我们需要知道什么是符号。