charleyup

为自己吹过的🐮🍺奋斗终生.

关于javascript原型链

2015/03/21

javascript常被描述为一种基于原型的语言,即每个对象都有一个原型对象.对象从原型中继承方法和属性,原型也可能还有原型,并从中继承方法和属性,一层一层以此类推,这种关系称为原型链.

实例与原型

当访问实例的属性或方法时,会首先在实例上查找,若找不到则沿原型链往上找,直至找到或达到原型链顶层.

_proto_

__proto__是每个对象(除null)都有的属性,它指向其构造函数的原型对象(prototype)

const a = 1
const b = "1"
a.__proto__ === Number.prototype // true
b.__proto__ === String.prototype // true

constructor

每个原型都有一个constructor属性,指向其构造函数

Person.prototype.constructor === Person // true

prototype

prototype是每个函数都有的属性,,是继承成员被定义的地方.

一切对象都继承自Object对象,Object对象直接继承根源对象null.

一切函数对象(包括Object)都继承自Function对象

Function.__proto__ === Function.prototype // true
Function.prototype.__proto__ === Object.prototype // true
Object.__proto__ === Function.prototype // true
Object.prototype.__proto__ === null // true

拓展原型链的方法

主要有以下几种,具体之后展开

  • new
  • Object.create
  • _proto_
  • Object.setPrototypeOf

原型链的意义

JavaScript的原型链就是该编程语言为了实现面向对象编程的一种设计,基于原型链,可以让JavaScript对象拥有封装、继承和多态等众多面对对象特性。