原型链回顾

对于原型链一直学的很懵,什么prototype __ proto __,实在是绕啊。
有一张原型链的图解(如下)如果是刚刚入门肯定被搞得晕头转向,这一个箭头那一个箭头的。今天把他拆开进行分析。
在这里插入图片描述
首先 函数才有 prototype 原型,对象 有 __ proto __ 属性。

在这里插入图片描述
上面的图就说明了 prototype 和 __proto __ 的区别
再到代码上来看看

let obj = {};
console.log(obj.prototype);  //undefied
console.log(obj.__proto); //Object{ ...拥有的一些方法}

let fn = function(){}
console.log(fn.prototype)  // fn {}
console.log(fn.__proto__)  //function(){}

再来看一张图
在这里插入图片描述

  1. 有一个 Person 构函数, new出来一个 person1 的函数。
  2. person1 的constructor 的指向原构造函数
  3. person1的 __ proto __ 指向 Person.prototype
  4. Person.prototype 的 constructor 是指向 Person的
  5. Person.prototype 的 prototype 是 Person.prototype

还是有点绕 ,再看看代码就能明白了

var Person = function(){
}
var person1 = new Person()

person1.constructor===Person;    //true
Person === Person.prototype.constructor; //true
person1.__proto__ === Person.prototype; //true
person1.__proto__.constructor === person1.constructor //true

原型知道了,再看看原型l链
所有函数的prototype 指向 Object.prototype
在这里插入图片描述
也就是
person1 ——> Person.prototype ——> Object.prototype

在 js里万物皆对象,函数也属于一个对象 所有就多了

Person ——> Function.prototype ——> Object.prototype
在这里插入图片描述

到这是不是就会觉得这个原型链会一直这么走下去,没有终点,但是 在控制输出
Object.prototype.__ proto __ 会指向 null

Object.prototype.__ proto __ 
  //null

所有原型链是有顶端的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值