子函数调用复函数的变量
每一个函数都有一个prototype属性,这个属性指向函数的原型对象。
function Person() {}var person = new Person();//每一个子对象(除null外)都会有的一个属性,指向该对象的原型
console.log(person.__proto__ == Person.prototype) // true//每个原型都有一个constructor属性,指向该关联的构造函数
console.log(Person.prototype.constructor == Person) // true// 顺便学习一个ES5的方法,可以获得对象的原型
console.log(Object.getPrototypeOf(person) === Person.prototype) // true
当获取 person.constructor 时,其实 person 中并没有 constructor 属性,当不能读取到constructor 属性时,会从 person 的原型也就是 Person.prototype 中读取,正好原型中有该属性,所以:person.constructor === Person.prototype.constructor
当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。
通过构造函数new出来的对象叫实例,创造对象的过程叫实例化