创建对象的几种方式
工厂模式
原理:在普通函数里面定义一个对象,再为该对象赋值属性和方法,再把这个对象 return 出来。
构造函数模式
原理:在普通函数中使用this,为这个this 赋值 属性和方法。这个函数就成了构造函数,用 new 关键字调用这个函数,创建一个实例对象。
- 原型模式
原理:原型模式跟构造函数很像,区别是每一个函数上面都有一个 prototype 对象,这个对象就是由特定的实例所共享的属性和方法
对象继承的几种方式
Class
这是构造函数的语法糖,使用class 声明一个类。
继承
派生类的方法可以通过 super 关键字引用它们的原型。
在静态方法中可以通过 super 调用继承的类上定义的静态方法
super 关键字的使用说明
super只能在派生类构造函数和静态方法中使用- 不能单独引用
super关键字,要么用它调用构造函数,要么用它引用静态方法。 - 调用 super()会调用父类构造函数,并将返回的实例赋值给 this.
抽象基类的定义
该类供其他类继承,但是本身不会被实例化,要达到这种效果。使用new.target语法来判断当前实例化的是不是自身。
class SuperArray extends Array {// 如果没有定义类构造函数,在实例化派生类时会调用 super() ,而且会传入所有传给派生类的 参数。// constructor(){// super()// }filterKey(key){console.log(this)return this.map(item => item[key])}}let arr = new SuperArray({a:'1',b:'2'},{a:'1',b:'2'},{a:'1',b:'2'})var newArr = arr.filterKey('a')console.log(newArr)
