温故而知新篇十

什么是原型

原型是一种对象属性,允许对象在彼此之间继承通用功能。 所有JavaScript对象都可以从Object.prototype继承属性和方法。 甚至原型本身也具有继承更多属性的能力,即另一个原型,也称为prototype chaining

可以让所有的对象实例共享它所包含的属性和方法。

原型对象、实例、构造函数的关系

每个构造函数都有一个原型对象,针对每个函数,都有一个prototype,属性该属性是个对象
每个原型对象都有一个指向构造函数的指针,针对每个对象,都有一个_proto_指针,指向构造函数的原型对象
每个实例都由一个指向原型对象的指针

在这里插入图片描述

proto和prototype

proto 通常称为隐式原型,prototype 通常称为显式原型,可以说一个对象的隐式原型指向了该对象的构造函数的显式原型。在显式原型上定义的属性方法,通过隐式原型传递给了构造函数的实例。这样一来实例就能很容易的访问到构造函数原型上的方法和属性了。

属性__proto__是一个对象,它有两个属性,constructor和__proto__;

原型对象prototype有一个默认的constructor属性,用于记录实例是由哪个构造函数创建;

构造函数

构造函数上可以附带 实例成员 和 静态成员

  • 实例成员: 实例成员就是在构造函数内部,通过this添加的成员。实例成员只能通过实例化的对象来访问。
  • 静态成员: 在构造函数本身上添加的成员,只能通过构造函数来访问。
    在这里插入图片描述

构造函数实现方法共享

  • 定义构造函数的规则: 公共属性定义到构造函数里面,公共方法放到原型对象上
    在这里插入图片描述
    在这里插入图片描述

Object和Function

Object、Function都是js内置的函数

Object.prototype是一切对象的根源,根源之上在没有其他。

Function的prototype是一个内置函数,一切函数都派生自这个内置函数。该内置函数对象的prototype指向根源对象。

函数既是函数又是对象,含有__proto__和prototype属性。__proto__指向Function.prototype,Function.prototype的__proto__属性又指向了 Object.prototype;prototype最终指向Object.prototype

原型链

prototype机制就是存在于对象中的一个内部链接,它会引用其他对象。

如果在当前对象没有找到需要的属性或者方法引用,引擎就会沿着prototype关联的对象继续查找,以此类推。这一系列对象的链接被称为原型链。

在这里插入图片描述

原型链的终点

Function.prototype.proto === Object.prototype

Object.prototype是原型链的最顶端,它的__proto__仍然存在,值为null

Guess you like

Origin blog.csdn.net/alnorthword/article/details/122430275