js 原型、原型链理解

function person() {
  this.name = '劝退师';
}
person.prototype.age = 20;
const p = new person();

运行发现如下

 自定义一个函数,函数包含两个关键数据 prototype,__proto__

1、原型 prototype:

person具有prototype属性:包含我们定义的属性name,age以及constructor,

并且constructor指向我们的person函数,可以理解为prototype就是我们原型对象,

下面我们会用到这句话。

2、原型链 __proto__

person 中的 __proto__ 是一个原始的 function 对象,

在 function 对象中,又看到了 __proto__ 这个属性,这时候它的值是原始的 Object 对象,

在 Object 对象中又再次发现了 __proto__ 属性,这时候 __proto__ 等于 null,

通过__proto__这个属性组成的链,就成为原型链。

3、两者的关系

我们在实例化person的时候,new person()的时候通过prototype和__proto__进行关联绑定属性

可以看很清楚看得出 我们new 出来的实例p 的p.__proto__就是我们前面person函数的prototype,

实例p的原型链步骤就是 p.__proto__ => {constructor:func}.__proto__ => Object => null

 

 实例对象步骤:

  • 实现继承:如果没有原型链,每个对象就都是孤立的,对象间就没有关联,所以原型链就像一颗树干,从而可以实现面对对象中的继承
  • 属性查找:首先在当前实例对象上查找,要是没找到,那么沿着 __proto__ 往上查找
  • 实例类型判断:判断这个实例是否属于某类对象
posted @ 2021-02-08 15:23  程序員劝退师  阅读(96)  评论(0编辑  收藏  举报