由浅入深理解原型与原型链

1、函数的prototype属性

  不管是JS内置的函数,还是我们自定义的函数,每一个函数都有一个prototype属性, 它默认指向一个Object空对象,这个默认的object空对象就是我们所说的原型对象

例如

// 每个函数都有一个prototype属性, 它默认指向一个对象(即称为: 原型对象)
	console.log(Date.prototype)
	function fn() {
   
	
	}
	console.log(fn.prototype)

打印输出:
打印结果

  此时看到打印输出的结果有人可能会有疑问,这个prototype属性所指向的对象默认不是为空,打印的结果不应该是一个空对象{},为什么现在打印输出的结果不是一个空对象?
  首先,Date()函数是JS内置的函数,它在创建之后,直接在原型对象上添加了很多方法以供开发者使用。 所以我们现在看到的Date.prototype原型对象是已经封装好的(在webstorm中,可以按着ctrl键点击进入EcmaScript.js里面查看)。
  其次,我们要知道,这个空对象说的是默认没有我们定义的属性和方法,constructor属性是每个原型对象都会有的一个属性,它默认指向函数对象 (现在不懂没关系,接下来会说明)。对于__proto__属性,他是实例化是所拥有的属性,至于为什么会出现在这里,我们之后会有讲解。

2、原型对象的constructor属性

  我们在前面已经提到了constructor这个属性,那么这个属性是干什么的,有什么用呐?
  constructor是原型对象中的一个属性,它指向函数对象。 看文字可能不太好理解,给大家看个图就会明白。
prototype与constructor的关系
  就是说,函数的prototype属性指向一个Object实例对象,这个实例对象的constructor属性又指向这个函数本身。

	function fn() {
   
	
	}
	// 原型对象中有一个属性constructor, 它指向函数对象
	console.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值