构造函数就是一个普通的函数,建立方式和普通函数没有区别,不一样的是构造函数习惯上首字母大写。另外就是调用方式的不一样,普通函数是直接调用,而构造函数须要使用new关键字来调用。bash
function Person() {};
var person = new Person();
复制代码
实例就是经过构造函数建立出来的对象。函数
每当定义一个函数数据类型(普通函数、类)时候,都会天生自带一个prototype属性,这个属性指向函数的原型对象,而且这个属性是一个对象数据类型的值。 spa
原型对象就至关于一个公共的区域,全部同一个类的实例均可以访问到这个原型对象,咱们能够将对象中共有的内容,统一设置到原型对象中。prototype
指从一个实例对象开始往上找,这个实例对象的__proto__属性所指向的则是这个实例对象的原型对象,若是用person表示这个实例,则原型对象表示为person.proto。同时,这个原型对象顾名思义也是一个对象,并且它也有上一级的原型对象,相对于上一级原型对象而言,它也是一个实例对象,那么它也拥有__proto__属性,它的__proto__属性也指向它的原型对象,后面也以此类推,一直到Object.prototype这个原型为止,Object.prototype为原型链的末尾点。3d
Person是构造函数, Person.prototype 是原型对象, person是实例, 实例能够经过_proto_找到原型对象。code
function A() {}
A.prototype.type = 'AAA'
function B() {}
B.prototype = new A()
b = new B()
console.log(b.__proto__.__proto__.type) //AAA
console.log(B.prototype.__proto__ == b.__proto__.__proto__) //true
console.log(A.prototype == b.__proto__.__proto__) //true
console.log(A.prototype == B.prototype.__proto__) //true
console.log(b.__proto__.__proto__.type == A.prototype.type) //true
复制代码
若是感受对你有帮助,那就收藏❤❤吧!cdn