浅谈原型及原型链的理解

一、原型

原型的作用:①数据共享,节约资源。②继承

例1:

let friend = new Person(); 
Person.prototype.sayHi = function() { 
 console.log("hi"); 
}; 
friend.sayHi(); // "hi",没问题!

实例之所以能够调用原型的方法是因为,实例与原型之间松散的联系,他先从实例中寻找,发现找不到,然后从原型中寻找找到了,然后输出。

例2:

function Person() {} 
let friend = new Person(); 
Person.prototype = { 
 	name: "Nicholas", 
	 age: 29, 
	 job: "Software Engineer", 
	 sayName() { 
		 console.log(this.name); 
	 } 
}; 
friend.sayName(); // 错误

原因:重写整个原型会切断最初原型与构造函数的联系,但实例引用的仍然是最初的原型。
实例只有指向原型的指针,没有指向构造函数的指针。

二、原型链

在这里插入图片描述
定义:

每个构造函数都有一个原型对象,原型有一个属性指回构造函数,而实例有一个内部指针指向原型。如果原型是另一个类型的实例呢?那就意味着这个原型本身有一个内部指针指向另一个原型,相应地另一个原型也有一个指针指向另一个构造函数。这样就在实例和原型之间构造了一条原型链。这就是原型链的基本构想。

特例:

Object.__ proto__ === Function.prototype //true
Object.__ proto__ === Function.__ proto__//true
Object.prototype === Function.prototype.__ proto__ // true
//因此
Function instanceof Object //true
Object instanceof Function //true

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值