本篇文章转载自我的个人博客
类的prototype和__proto__
1、Class同时具有prototype和__proto__
2、子类的__proto__属性表示构造函数的继承,总是指向父类
3、子类的prototype属性的__proto__属性表示方法的继承,总是指向父类的prototype属性
4、作为对象子类B的原型(__proto__)是父类A,作为构造函数,子类B的原型(prototype)是父类的实例
class A{
}
class B extends A{
}
B.__proto__ === A; //true
B.prototype.__proto__ === A.prototype; //true
extends的继承目标
class B extends A{
}
//A只要有prototype属性,B就能继承
三种特殊情况:
1、子类继承Object类
class A extends Object{
}
B.__proto__ === A; //true
B.prototype.__proto__ === A.prototype; //true
//A就是构造函数Object的复制,A的实例就是构造函数的实例
2、不存在任何继承
class A{
}
A.__proto__ === Function.prototype; //true
A.prototype.__proto__ === Object.prototype; //true
//A作为基类就是普通函数,A调用后返回一个空对象(即Object实例)
3、子类继承null
class A extends null{
}
A.__proto__ === Function.prototype; //true
A.prototype.__proto__ === undefined; //true
//A作为基类就是普通函数,A调用后返回一个对象不继承任何方法
子类实例的__proyo__.__proto__指向父类实例的__proto__属性
ECMAScript原生构造函数
- Boolean()
- Number()
- String()
- Array()
- Date()
- Function()
- RegExp()
- Error()
- Object()