原型
/*
实例继承来自父级构造函数的属性和方法。
注意两个词: 原型 原型对象
每个函数都有一个prototype属性,该属性指向一个对象,这个对象正是调用该构造函数而创建的实例的原型
每个原型都有一个 constructor 属性指向关联的构造函数
1. 在使用构造函数创建实例时,浏览器会为该实例新增一个__proto__属性,该属性指向该实例对象的原型(即父级的prototype)。
2. 构造函数的原型对象的constructor属性指向该构造函数
person -> Proson -> Object -> null
*/
function Person() {}
const person = new Person();
console.log(person.__proto__ === Person.prototype); // 1
console.log(Object.getPrototypeOf(person) === Person.prototype); // true
console.log(Person.prototype.constructor === Person); // 2
console.log(Person.prototype.__proto__ === Object.prototype);
console.log(Object.prototype.constructor === Object);
console.log(Object.__proto__ === Function.prototype);
console.log(Object.prototype.__proto__ === null);