关于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对象拥有封装、继承和多态等众多面对对象特性。