js基础

56 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

原型

原型是我们在js里面共享方法的终极解决方案

固定流程

// 1 声明一个构造函数
function 构造函数的名字(){
  写各个属性
}

// 2 把所有的方法,全都写在原型对象身上
构造函数的名字.prototype.方法名 = function(){}

想要解决构造函数浪费内存的问题:把属性写在构造函数里面,把方法写到原型对象身上就行

到底什么是原型

原型本质其实是一个对象,这个对象,只要我们声明了构造函数,js就会自动的分配一个原型对象,这个原型对象的作用,就是用来给所有的实例对象共享方法。

解决问题的原理

image.png

所有的实例对象在调用方法的时候,其实都是访问的原型对象上面的唯一的sayHi方法,此时内存中只有一个sayHi方法,所以节省了内存


原型三角关系图

image.png

构造函数的prototype属性指向原型对象

实例对象的__proto__属性指向原型对象

原型对象的contructor属性指向构造函数


原型链

实例对象上面有一个属性__proto__ 属性,该属性是原型对象,我们发现原型对象身上还有 __proto__ 属性,每个实例对象身上都是有1__proto__ 属性的。多个实例对象之间的__proto__属性,组从了一条链子————原型链

image.png

原型链的尽头是null

原型链就是js里面实现继承的原理

Object.prototype身上的方法,可以被Student的实例对象调用,就实现了代码的重复使用

原型链上面成员的访问规则

就近原则

1.如果自己有,就优先使用自己的

2.如果自己没有,就会往原型链上面查找

3.如果原型链上面也没有,就会返回undefined