JS中的继承方式,以及JS中经典的抽象概念,ES5和ES6的继承区别
一:JS中的抽象概念
在说继承方式之前,先来了解下js中几个较为抽象的概念。
1.原型
原型就是
在js中万物皆对象,对象又分为两种:普通对象(Object)和函数对象(Function)。-----null也是对象,但这里不做考虑。
任何对象都具有隐式原型属性(__proto__
),因为是人人平等的属性,所以,加上了双下划线,可以理解为魔法属性。
只有函数对象有显式原型属性(prototype)。
参考地址:https://blog.csdn.net/u012468376/article/details/53121081
2.原型链:原型链是针对原型对象的,在查找实例属性时,现在实例中查找,如果没有找到,再到obj.proto(=f1.prototype)原型对象,再到f1.prototype.proto(=f2.prototype),依次向上查找。
3.作用域链:作用域链是针对变量的,现在自己的变量范围内查找,找不到,再沿着作用域网上查找。
4.构造函数、原型对象和实例之间的联系(图示)
5.构造函数、原型对象、子类构造函数、子类原型对象和子类实例之间的联系(图示)
ES5中乱七八糟的继承,在ES6中得到梳理
ES5中,有六种继承方式
ES6中,只有一种继承方式
具体参考如下
https://www.cnblogs.com/annika/p/9073572.html