JS原型链图解

JS原型链

原型

原型就是对象

每个构造函数都有一个原型对象,原型对象包含一个指向构造函数的指针,实例包含一个指向原型对象的内部指针。其他对象可以通过原型实现属性继承。

下面用例子解释一下:

//这是狗的构造函数
function Dog(species){
	this.species=species;
	this.introduce=function(){
		alert(this.species);
	}
}
//构造函数Dog()生了一只小狗叫dog1
var dog1=new Dog('Husky');
dog1.introduce();

在上面代码中,Dog()有个属性叫prototype,这个属性指向一个对象,这个对象包含了所有狗的实例的共享的属性和方法,这就是原型对象。

原型链

在上面例子中,Dog()有个属性叫prototype指向原型对象
dog1有个属性__proto__也指向这个原型对象
然后原型对象有个属性constructor指向构造函数Dog()
js原型链_01

所有的对象都可以扩展属性,所有的对象都有__proto__属性,所有的函数都有prototype属性,所有对象的__proto__属性指向它的构造函数prototype属性。由于原型对象也是对象,所有它也有__proto__属性指向它的原型对象,原型链的核心就是依赖对象的__proto__指向,当自身不存在某个属性时,就往上一层找,直到Object

在这里插入图片描述

通过构造函数可以实例化对象,而每一个实例化对象都默认含有一个隐式的属性__proto__来指向该构造函数的原型对象。
在上图中:

  1. dog1的__proto__指向Dog.prototype,Dog.prototype的__proto__指向Object.prototype,Object.prototype的__proto__指向null
  2. 红线标注的constructor是继承来的属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值