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原型链图解_第1张图片

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

JS原型链图解_第2张图片

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

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

你可能感兴趣的:(JS,js)