重学javaScript (二十)|原型链

83 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

前言

上一篇文章,简单的叙述了一下原型,我们得知,查找属性的顺序是

对象本身 - 对象的原型对象 - 对象原型对象的原型对象

一直循环下去,直到找到最顶层的原型对象为止,这个链条被称为原型链

举个栗子

let obj = {
    name: 'kaka'
}

// 先直接找一个它自己没有的属性
console.log(obj.age)

// 在它的原型上挂载一个age
obj.__proto__.age = 22

console.log(obj.age)

image.png

最顶层的原型对象

大家一定很好奇,既然是个链条,那么函数和对象的原型是什么呢

  • 对象中是一个object对象
  • 函数中是一个function
let obj = {
    name: 'kaka'
}



function foo() {

}

console.log(foo.prototype)
console.log(foo.__proto__)

image.png

Object的原型

事实上,不管是对象还是函数,它们原型链的尽头都是Object的原型,也称之为顶层原型,我们可以打印看看这个顶层原型长什么样。

console.log(Object.prototype)

image.png

我们再来验证下Object的原型的原型看看有没有东西呢

console.log(Object.prototype.prototype)

image.png

可以看出来它是个undefined,说明object的原型是最顶层的原型了,实际上函数和对象的最终指向都是它

做个总结吧

  • 从Object的原型可以得出一个结论“原型链最顶层的原型对象就是Object的原型对象”,这也就是为什么所有的对象都可以调用它的公共方法了,如toString和pareInt方法了;