0
点赞
收藏
分享

微信扫一扫

JS原型对象、原型链

最不爱吃鱼 2022-02-04 阅读 118

一、原型对象的定义

在js中,每个对象都有一个与他关联的对象,这个对象就叫做原型对象(对象的__proto__属性),他可以使多个对象共享一个或者多个方法。

二、构造函数、实例、原型对象的关系

// 构造函数:封装的函数,如果通过new操作符来调用的,就是构造函数,如果没有通过new操作符来调用的,就是普通函数
function Cat(name){
	this.name=name;
}
// 实例 如cat1、cat2
cat1=new Cat('小猫1');
cat2=new Cat('小猫2');

// 原型对象:对象的__proto__属性
// 如cat1的原型对象就是cat1.__proto__

// 另外,实例的__proto__就是构造函数的prototype
console.log(cat1.__proto__ == Cat.prototype) // true
console.log(Cat == Cat.prototype.constructor) // true
// 原型的原型(...的原型)最终指向Object的原型
console.log(Cat.prototype.__proto__ == Object.prototype) // true

关系图

			  实例对象			→	→	

构造函数 ↓ .__proto__

.prototype ↓ ↑ .constructor

原型对象 ← ←


→ → → → → → Object的原型
.__proto__

三、原型链

js在每次获取对象属性时都是一次查询过程,如果在自有属性中找不到就会去原型对象中找,如果原型对象中还找不到,就会去原型对象的原型对象中找,直到找到最顶端的object,这查找的路线就被叫做原型链

四、继承

实例继承原型对象的属性和方法

function Cat(name){
	this.name=name;
}

cat1=new Cat('小猫1');
cat2=new Cat('小猫2');

//现在给原型对象添加一个eat方法
Cat.prototype.eat=function(){
	console.log(this.name+'吃')
}

// 就可以看到虽然此时实例cat1和cat2本身没有eat方法,
// 但都可以通过原型链访问到原型对象的方法
cat1.eat();// 小猫1吃
cat2.eat();// 小猫2吃
举报

相关推荐

0 条评论