什么是原型链?

南山隐士 2022年06月25日 20 0

谈到原型链就先得说说什么是原型了

什么是原型

原型指的是函数的prototype属性,以及对象的__proto__属性,而需要注意的是,因为我函数也属于对象,所以函数存在我刚刚述说的2个属性

而函数prototype属性的值是一个对象,他至少有2个属性: constructor__proto__,但是Object.prototype除外!

constructor 属性的值指向的是其 构造函数 本身

	//创建一个构造函数
	function Person (name, age) {
	  this.name = name
	  this.age = age
	}
	
	//通过instanceof可以看出prototype是一个对象
	console.log(Person.prototype instanceof Object)//true
	
	//constructor属性指向的是其构造函数本身
	console.log(Person.prototype.constructor === Person)//true
	
	//Function构造函数的__proto__的值指向Function.prototype
	console.log(Function.__proto__ === Function.prototype)//true
	
	//构造函数的prototype对象它的__proto__的值都是指向Object.prototype
	console.log(Person.prototype.__proto__ === Object.prototype)//true
	
	const yaojin = new Person('遥近', 18)
	//可以看到通过new创建的对象其__proto__指向其构造函数的prototype
	console.log(yaojin.__proto__ === Person.prototype)//true
	
	//say方法,yaojin对象本身没有,会延着原型链,最终在其构造函数prototype中找到
	Person.prototype.say = function () {
	  console.log('遥近您好')
	}

而对象的__proto__属性它的值分4种情况

1.构造函数的Function的__proto__的值指向的是Function.prototype

2.通过 new 创建的对象,它的值指向的是其构造函数的prototype

3.所有构造函数的prototype对象,它的值指向的是Object.prototype

4.Object.prototype的__proto__指向的是null

而就是这种__proto__属性组成的链式结构,就形成了原型链了

它的作用是让对象查找属性有一套规则,它会先从自身寻找对应的属性,没有就会从它构造函数的prototype属性查找,最终来到Object.prototype,还是没有的话就会返回undefined

原型链图

原型链.jpg

Last Updated: 2022/06/25 18:58:36
谈谈跨越 什么是构造函数