原型继承:
    a、基于类的继承(C, C++, Java等)
    b、基于原型的继承(js)
    把对象的属性proto称为对象的原型,对象的属性proto指向的是一个对象,指向的那个对象称为该对象的原型对象,因此对象可以直接访问原型对象上的属性和方法,我们把查找属性和方法的路径称为原型链
    1、构造函数、原型和实例的关系
    function Person(name) {
    this.name = name;
    }
    var person = new Persion(“小涛”);
    Person称为persion对象的构造函数
    person称为Person函数的实例

    万物皆对象
    proto 一般是对象的一个属性,也称为对象的原型(proto是一个不规范的属性,只是浏览器实现了该属性,标准的属性为[[prototype]])
    prototype 一般是函数的原型

    注意大多数情况下 proto可以理解构造函数的原型 除了Object.create()方法除外
    eg person.constructor.prototype === person.proto
    构造器的原型可以理解为当前对象下的proto.constructor等于你定义的遍历下所有的方法

    proto:
    proto的三种实现方式:

    1、字面量方式
    var a = {};
    console.log(a. proto === a.constructor.prototype) // true

    // Function Object 函数 对象
    console.log(Function. proto_ === Function.prototype) // true
    console.log(typeof Object) function
    console.log(Object.
    proto__ === Function.prototype); // true
    => Object.
    proto === Function.proto_

    Object. _proto. _proto === Object.prototype;
    Object.proto .proto !== Function.prototype;
    Object.proto .proto. proto === Function.proto_. proto. _proto === null;

    2、构造函数
    var A = function(){}
    var b = new A();
    console.log(b.proto) // {}
    console.log(b. proto_ === b.constructor.prototype) // true
    b.constructor === A; // true
    A.prototype.
    proto__ === Object.prototype // true;
    Object.prototype.
    proto_ === null // true

    3、Object.create
    var c = {};
    var d = Object.create(c);
    console.log(d.proto); // {}
    console.log(d. proto_ == c.constructor.prototype) // false
    console.log(d.
    proto_ === c) // true