函数创建时,Node.js会为这个函数自动添加prototype属性,值是空的字典表对象{}
在let person=new Person();时 ,此时function Person(){} 就是一个构造函数(constructor)
那么JS就会帮你创建该构造函数的实例
该实例 会继承 构造函数内 已定义的 prototype指向的所有属性和方法
该实例 通过 设置自己的__proto__ 指向构造函数的 prototype来实现这种继承
Node.js通过__proto__和prototype的合作实现了原型链、对象的继承
Node.js是单继承的,Object.prototype是原型链的顶端,类似于Java的Object类
构造函数,通过prototype来存储要共享的属性和方法,也可以设置prototype指向现存的对象来继承该对象
对象的__proto__指向自己构造函数的prototype
console.log(Ausua.__proto__==Person.prototype); 返回true
注意:prototype 函数的内置属性 显示修改对象的原型的属性
proto 实例对象的内置属性 JS内部使用寻找原型链的属性
ES规范定义对象字面量的原型就是Object.prototype
最后
引用《JavaScript权威指南》的一段描述:
Every JavaScript object has a second JavaScript object (or null , but this is rare) associated with it.
This second object is known as a prototype, and the first object inherits properties from the prototype.