目录
原型对象的优点:
把构造函数的方法或者属性写到原型对象中,在实例化对象的时候可以省去实例对象开启属性的内存。
原型链元素之间的关系:
通过构造函数生成实例对象,实例对象的原型属性是构造函数的原型对象。而他们三个之间的关系无非就是prototype、__proto__、constructor。
一张美图搞懂原型链
附测试代码:
// 一、构造函数Person
function Person(name) {
this.name = name;
}
// 二、实例化一个student
var student = new Person('张三');
// 三、打印student的原型对象
console.dir(student.__proto__); // (1) 这是实例化对象的原型对象
console.dir(Person.prototype); // (2) 这是构造函数的原型对象
//对比 (1)和(2) 发现一毛一样!! !
//所以结论: 实例对象的原型对象 === 构造函数的原型对象
// 四、打印原型对象的constructor
console.dir(student.__proto__.constructor); // (3) 实例对象的原型对象的构造函数
console.dir(Person.prototype.constructor); // (4) 构造函数的原型对象的构造函数
// 对比 还是一毛一样
// 剩下的什么实例对象的原型对象的原型对象的,
// 以及原型对象的原型对象的原型对象
// 以及原型对象的原型对象的构造函数
// 还有原型对象的原型对象的原型对象的构造函数
// 我就不写了, 原理一样