JavaScript原型、原型链、构造函数

148 阅读1分钟

对象的原型指针

每一个javascript对象都有一个原型指针属性。我们可以通过obj.__proto__(已废弃)和 Object.getPrototypeOf(obj)获取对象obj的原型指针指向的对象。

对象以其原型指针指向的对象为模板,从原型指针指向的对象中继承方法和属性。

原型链

原型指针指向的对象也有自己的原型指针属性,一层一层,以此类推,这种关系常被称为原型链。

函数的prototype属性

我们通过构造函数创建一个对象,即let obj = new Object(), 那么对象obj的原型指针指向的对象就是构造函数Object的prototype属性。Object的prototype对象也有自己的原型指针,该指针指向的是null,即Object.prototype.__proto__ === null, 则我们可以理解为所有原型链的链头是null。

JavaScript通过原型这种机制实现继承,那么构造函数的prototype属性就是用来存放需要继承的属性和方法的对象。

function fun(){}
let f = new fun()

//f.__proto__ === fun.prototype
//fun.prototype.__proto__ === Function.prototype
//Function.prototype.__proto__ === Object.prototype
//Object.prototype.__proto__  === null

对象的constructor属性

每个对象都会从它的原型上继承constructor属性,该constructor指向它的构造函数;函数也是对象。

通过constructor可以获取当前对象的构造函数

function fun(){}
let f = new fun()

// f.constructor === fun.prototype.constructor === fun
// fun.constructor === Function.prototype.constructor === Function

参考链接

developer.mozilla.org/zh-CN/docs/…