了解原型的增删改查以及原型链

412 阅读2分钟

「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

上一节我们了解了原型,原来它就是一个对象,它是function对象的一个属性,它定义了构造函数构造出对象的共有祖先。通过该构造函数生成的对象可以继承原型上的属性和方法

这一节我们来了解原型的增删改查,以及了解原型里面具体有什么东西组成

首先来看原型的增删改查

其实这部分比较容易理解,简单记一下:

  • 增:通过原型;比如:Student.prototype.qulity = 100;
  • 删:通过原型;比如:delete Student.prototype.quity;
  • 修改:通过原型;比如:Student.prototype.qulity = 80;
  • 查询:通过原型或者对应构造函数产生的对象;比如;Student.prototype.qulity 或者 tom.qulity;

注意:后代能查看原型的东西,不能更改。(非绝对,引用值可以)

原型对象里面包含三个部分:

  • 我们定义在原型上的东西
  • constructor
  • __proto__

下面我们一个一个来说:

原型中的constructor就是该构造函数,有点相互映射的感觉,你有一个属性指向我,我也有个属性指向你。

构造函数的原型里面还有原型,这个原型指向的不是Object,而是Object的原型:Object.prototype。像这种原型里面还有原型,他们之间通过__proto__形成一条链,我们称为原型链

Object.protoype里面没有原型了,也就是Object.protoype就是这原型链的终端了。那所有的对象都会继承自Object.prototype吗?答案不是的。可以说绝大数对象最终都会继承自Object.prototype,但是有例外。我们再创建对象的时候,处理字面量和构造函数new出来以外,其实还有一种方式,通过Object.creat()方法创建,里面传入的可以是一个对象或者时null,表示的是这个对象的原型,当传入是null时,表示没有原型。即通过Object.creat()方法可自定义原型。