原型链的理解

在理解原型链之前首先要清楚的知道什么是原型对象

原型对象

在JavaScript中,除去一部分内建函数,绝大多数的函数都会包含一个叫prototype的属性,指向原型对象。

内建函数:是指js的内置对象是js自带,封装了一些常用的方法,供开发者使用,可以无需创建对象直接使用。常用的js内置对象有:String,Date,Array,Math等

基于构造函数创建出来的实例,都可以共享访问原型对象的属

例如:hasOwnProperty,toString方法等其实都是Object原型对象的方法,它可以被任何对象当做自己的方法来使用

hasOwnProperty:用于判断,某个属性,是否属于自己的(或者是原型链上的)

let person = { 
  name: "Tom", 
  age: 18, 
  job: "student"
}

console.log(person.hasOwnProperty("name")) // true 
console.log(person.hasOwnProperty("hasOwnProperty")) // false 
console.log(Object.prototype.hasOwnProperty("hasOwnProperty")) // true

 可以看到,hasOwnProperty并不属于person对象上的属性,但是person却能调用

那么person对象是如何找到Object原型中的hasOwnProperty方法呢?这就是靠原型链的能力

如果当前对象上没有,会往原型上找,如果还没找到,会继续往上找原型的原型,直到找到最顶端,Object.prototype,如果还没找到,就会报错(等于null)

在JavaScript中,每个对象中都有一个__proto__属性,这个属性指向了当前对象的构造函数的原型

对象可以通过自身的__proto__属性与它的构造函数的原型对象连接起来

而且它的原型对象上也有__proto__,因此串联形成了一个链式结构,也就是我们称为的原型链

posted @ 2021-03-31 23:04  ShuaiBiZou  阅读(943)  评论(0)    收藏  举报