原型链--《每日学习》

一、什么是原型?

每一个javascript函数都会有一个prototype属性,这个prototype指向的对象是原型对象。

这个原型对象是可以被调用构造函数创建的实例所共享。

比如


   
   
  1. function Target( ) {
  2. }
  3. Target. prototype. name = "hi"
  4. let target_first = new Target()
  5. let target_second = new Target()
  6. console. log(target_first. name) // 输出 hi
  7. console. log(target_second. name) // 输出 hi

二、 什么是构造函数?

构造函数其实是一个普通函数,创建方式和普通方式没什么区别,但它的本质是初始化对象,要和关键字 new 一起使用进行创建对象,构造函数可以给对象添加属性和方法。


   
   
  1. //构造函数
  2. function Target( age) {
  3. this. age = age
  4. }
  5. let target_first = new Target( 18)
  6. console. log(target_first. age) // 输出 18

每个原型对象都会有一个constructor属性,指向该关联的构造函数。

图1表示构造函数和实例原型关系:

                                                                  图1

三、什么是原型链?

 首先得介绍一下__proto__这个属性,每个创建出来的对象都会拥有这个属性,这个属性会指向该对象的原型对象。

图2表示属性__proto__的关系图:

图2

 我的理解是原型链是表示实例对象与原型对象之间的关系,就比如实例target通过属性__proto__指向原型对象Target.prototype,原型对象Target.prototype的属性__proto__指向Object原型对象Object.prototype,从而形成一条原型指向的链条。图3表示原型链关系图。

图3

Object是JS中所有对象数据类型的基类(最顶层的类),所以Object.prototype上没有__proto__这个属性

console.log(Object.prototype.__proto__) // 输出 null
    
    

 原型链查找方式:

当我们访问实例对象的一个属性或者方法时,先从该实例对象去寻找,如果有就直接使用,如果没有的话,继续到原型对象去寻找,直到找到Object的原型对象,如果Object的原型对象还是没有的话,就返回undefined。

这是我对原型与原型链的初步认识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值