JS继承

Posted by hdj on October 13, 2019

基准

1.每个构造函数都有一个原型对象(prototype).
//即每一个构造函数有一个prototype属性,prototype指向另一个对象(Object),
//这个对象(Object)的所有属性和方法都会被构造函数的实例继承.
2.原型对象(prototype)都包含一个构造函数指针(constructor).
//prototype就是通过constructor指向Object的.
3.实例都包含一个指向原型对象的内部指针(_proto_).
//_proto_是查找函数或对象的原型链的方式.

    function Foo(){
      // do something
    }
    const f1 = new Foo() 

只有函数对象才有prototype属性,函数对象简单说就是由function声明的函数

一个实例【f1】拥有一个构造函数(constructor)和(proto),function 拥有(prototype,和__proto__)

实例【f1】的构造函数指向new 生成的函数【Foo】,__proto__指向 【Foo.prototype】

【Foo.prototype】的构造函数constructor是【Foo】,__proto__指向 【Function.prototype】

总结一

  1. constructor属性:指向构造函数 (对象类型有)

  2. prototype属性:原型对象,object类型(Function.prototype除外,后面会讲),不需要记它指向谁,因为它不指向谁,就是个对象(有点绕),总之记住它就是个对象就好,一个对象的原型对象的构造函数就是这个对象本身,下面有代码解释

  3. __proto__属性:指向构造函数的原型对象(函数,对象共有)

总结二(特殊情况)

Object.prototype.__proto__ === null

Function.constructor === Function

Function.__proto__ === Function.prototype

Function.prototype.__proto__ === Object.prototype

Function.prototype.__proto__.__proto__ === null

神图解释

js-原型图解