原型的学习总结(刚刚开始的)

如上图 此图是在一个大佬的知乎上拿的 用他的图帮助理解了原型!不错不错!

首先:要知道三个概念--> 1.构造函数  2.实例化对象  3.原型对象  

其次:弄清楚他们三者的关系

一、构造函数: 

1. 构造函数也是一个对象

2.构造函数里面有一个属性-->prototype   它的指向(值)是原型对象 ,配合上图理解就是:prototype就是右上角那一个大方块-->原型对象

二、实例化对象

1. 实例化对象含有一个非标准的原型-->__proto__,也就是图上的 [[prototype]] ,它的指向也是原型对象。所以 console.log(实例对象.__proto__== 构造函数.prototype)输出的值是true

2.构造函数中的原型对象是可以被实例化对象直接访问的。

如 上图的原型对象中含有sayName方法,而实例化对象中并没有这个方法,如果要用这个方法,只需要 : person1.sayName() 就可以了。其实它本来的调用是这样的 :                                 person1.__proto__.sayName()

三、原型对象

1.原型对象:构造函数中的一个属性-->prototype 就叫构造函数的原型对象

2.构造函数的原型对象中有一个属性:constructor ,它叫构造器,这个构造器指向的(也就是值)就是自己所在的原型对象所在的构造函数。可以根据图进行理解

 

小总结:

1.console.dir() 输出的如果有 __proto__ 这个属性的就是实例对象,如果有 prototype 这个属性的就是构造函数

2.console.log()括号里面常用 构造函数.prototype  而少用 实例对象.__proto__  因为有一些浏览器有兼容性问题

暂时就学到这么多,以后有学到啥再继续完善!

 

第一次更新:

经过一段时间的学习,又了解到了原型的指向可以改变的内容,现在做下记录,补充一下内容。

原型的指向是可以改变的:

1.实例对象的原型 __proto__ 指向的是该对象所在的构造函数的原型对象prototype

2.构造函数的原型对象如果发生改变了,那么__proto__的指向也会发生改变

3.实例对象和原型对象之间的关系是通过__proto__原型联系起来的,这个关系就是原型链

 

原型指向的改变方法:

通过将另外一个构造函数实例化,并且赋值给当前构造函数的原型对象 这样就可以达到改变原型的指向这个目的

例如:Student.prototype = new Person;

有两个构造函数,student构造函数的原型指向改变为person的实例对象时,他的实例对象的__proto__的指向也会跟着改变

注意:如果原型的指向发生改变,那么给原型添加方法就要在改变指向之后,否则无法找到那个方法。

这个图是在黑马老师课上截的,方便巩固学习。

 

第二次更新:

__proto__的指向问题:

1:实例对象里的__proto__指向所在构造函数的原型对象prototype

2:构造函数的原型对象prototype里有一个__proto__,它指向另外一个构造函数object的原型对象prototype

3:object里的prototype里面有一个__proto__,它指向 null

 

配合上图看更好理解!

 

知识点补充:对象

因为JS是一门动态类型的语言,所以对象没有的属性或者方法,只要 对象.属性(或者方法)  就相当于创建了一个属性(或者方法),只是没有赋值而已。当然,返回值也是undefined,除非给它赋值才不一定是undefined。

例如: this.init()--------this.num = 1;------这类都是自动创建的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值