创建对象的几种方式

  • 工厂模式

    原理:在普通函数里面定义一个对象,再为该对象赋值属性和方法,再把这个对象 return 出来。

  • 构造函数模式

原理:在普通函数中使用this,为这个this 赋值 属性和方法。这个函数就成了构造函数,用 new 关键字调用这个函数,创建一个实例对象。

  • 原型模式

原理:原型模式跟构造函数很像,区别是每一个函数上面都有一个 prototype 对象,这个对象就是由特定的实例所共享的属性和方法

对象继承的几种方式

Class

这是构造函数的语法糖,使用class 声明一个类。

继承

派生类的方法可以通过 super 关键字引用它们的原型。
在静态方法中可以通过 super 调用继承的类上定义的静态方法

super 关键字的使用说明

  • super 只能在派生类构造函数和静态方法中使用
  • 不能单独引用 super 关键字,要么用它调用构造函数,要么用它引用静态方法。
  • 调用 super()会调用父类构造函数,并将返回的实例赋值给 this.

抽象基类的定义
该类供其他类继承,但是本身不会被实例化,要达到这种效果。使用new.target语法来判断当前实例化的是不是自身。

  1. class SuperArray extends Array {
  2. // 如果没有定义类构造函数,在实例化派生类时会调用 super() ,而且会传入所有传给派生类的 参数。
  3. // constructor(){
  4. // super()
  5. // }
  6. filterKey(key){
  7. console.log(this)
  8. return this.map(item => item[key])
  9. }
  10. }
  11. let arr = new SuperArray({a:'1',b:'2'},{a:'1',b:'2'},{a:'1',b:'2'})
  12. var newArr = arr.filterKey('a')
  13. console.log(newArr)