开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
原型
原型是我们在js里面共享方法的终极解决方案
固定流程
// 1 声明一个构造函数
function 构造函数的名字(){
写各个属性
}
// 2 把所有的方法,全都写在原型对象身上
构造函数的名字.prototype.方法名 = function(){}
想要解决构造函数浪费内存的问题:把属性写在构造函数里面,把方法写到原型对象身上就行
到底什么是原型
原型本质其实是一个对象,这个对象,只要我们声明了构造函数,js就会自动的分配一个原型对象,这个原型对象的作用,就是用来给所有的实例对象共享方法。
解决问题的原理
所有的实例对象在调用方法的时候,其实都是访问的原型对象上面的唯一的sayHi方法,此时内存中只有一个sayHi方法,所以节省了内存
原型三角关系图
构造函数的prototype属性指向原型对象
实例对象的__proto__
属性指向原型对象
原型对象的contructor属性指向构造函数
原型链
实例对象上面有一个属性__proto__
属性,该属性是原型对象,我们发现原型对象身上还有 __proto__
属性,每个实例对象身上都是有1__proto__
属性的。多个实例对象之间的__proto__
属性,组从了一条链子————原型链
原型链的尽头是null
原型链就是js里面实现继承的原理
Object.prototype身上的方法,可以被Student的实例对象调用,就实现了代码的重复使用
原型链上面成员的访问规则
就近原则
1.如果自己有,就优先使用自己的
2.如果自己没有,就会往原型链上面查找
3.如果原型链上面也没有,就会返回undefined