js 从一段多态代码说起

138 阅读1分钟

多态, 最初的理解就是: 相同的函数, 不同的实现。官方一点就是把“做什么”和“谁来做”分开。

es6一个简单的多态

class Animal{

  constructor(){
    this.name = name;
  }
  
  getName() {
    return this.name;
  }
}

class Dog extends Animal {
  constructor(name) {
    super(name);
  }
  
  speak(){
    return 'speak'
  }
}

通过es5实现

 function Animal(name){
   this.name = name;
 }
 
 Animal.prototype.getName = function(){
   return this.name;
 }

从js 的语言特性上可以看出,要得到一个对象, 不是通过实例化, 而是找到一个对象作为原型并克隆它, 而我们并不需要知道克隆的细节。 在以上的代码中, animal 并不是类, 而是作为构造器被调用, new 是使用构造器来创建对象的过程, 实际上就是先clone Object.prototype, 再进行一些额外其它操作的过程。