关于原型和原型链的几点小知识

137 阅读1分钟

1. Object.getPrototypeOf 可以从子类上获取父类

class A{
}
class B extends A{
}
console.log(Object.getPrototypeOf(B) === A) // true

2.  __proto__ 和constructor 是对象所特有的,prototype是函数所特有的,但是js中函数也是对象,所以函数也有 __proto__和constructor

3. 当存在继承的时候 有两条继承链

(1)子类的__proto__属性表示构造函数的继承,总是指向父类

(2)子类prototype属性的__proto__属性表示方法的继承,总是指向父类prototype

   原型链继承 : 

   B.prototype = Object.create(A.prototype)

   等同于 B.prototype.__proto__  = A.prototype

    两种情况

 (1)子类继承Object

class A extends Object{}

          A是构造函数Object的复制,A的实例就是Object实例

 (2)不存在继承 

class A{}
A.__proto__ === Function.prototype
A.prototype.__proto__ === Object.prototype

           A作为基类(就是个普通函数),直接继承Function.prototype

           A.prototype.__proto__指向构造函数(Object)的prototype属性

4. 实例的__proto__属性 子类原型的原型指向父类的原型

B 继承 A
let a = new A()
let b = new B()
b.__proto__.__proto__ === a.__proto__
b.__proto_ 其实是B.prototype a.__proto__其实是A.prototype