本节课的理解

本节课的理解

本节课感觉没怎么看懂,但是我按照对本节课的理解整理了一下笔记,请老师看一下我对本节课的理解是否正确。


任何函数内部都有一个prototype属性,这个属性以对象的形式存在,指向新建的Object对象。通过这个函数创建的每个对象,这些对象中都有一个__proto__属性,将__proto__属性指向这个函数的prototype.从而__proto__也指向Object对象


http://img1.sycdn.imooc.com//climg/6013dea4098d09dc19860406.jpg


这个Person函数里有一个prototype属性,指向一个Object对象,通过Person函数创建的对象的步骤如下


1. 首先创建一个空对象 (var person = {})


2. person.__proto__ = Person.prototype


3. 初始化这个对象


此时这个链为

http://img1.sycdn.imooc.com//climg/6013df1c098e478605580828.jpg


我感觉我这里的理解可能不正确,因为通过Person函数创建的对象


http://img1.sycdn.imooc.com//climg/6013e0e609a38aad21880792.jpg


http://img1.sycdn.imooc.com//climg/6013e10d09a7661915150414.jpg


这里我认为prototype 和 __proto__指向的是一个Object对象,但打印出来发现好像是Person函数。


继承就是通过这种链实现的,可以通过__proto__属性或者prototype对象增加父类,并可以通过__proto__属性在父对象中声明相应的属性和方法,供子对象调用


http://img1.sycdn.imooc.com//climg/6013e1df094da62412260713.jpg


这时这里的继承链如下


http://img1.sycdn.imooc.com//climg/6013e1f70935bd1011400750.jpg


将Student所有对象的父对象都设置为person对象 ,如下

http://img1.sycdn.imooc.com//climg/6013e218096c1b0812260750.jpg

http://img1.sycdn.imooc.com//climg/6013e22509a5081512020154.jpg


这时这个通过函数Student创建的所有对象的父对象都是person。


查找对象中的属性和方法时,在本对象中找不到时,会通过链查找父对象是否有相应的属性和方法,如果也找不到,再往上查找父对象,直到在Object对象中也找不到时,才会抛出异常。




正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,这次理解的没有问题,很棒!

祝学习愉快~

好帮手慕星星 2021-01-29 19:36:06

同学你好,问题解答如下:

1、关于第一部分理解有点问题

http://img1.sycdn.imooc.com//climg/6013eb3b09c1fa8b07640116.jpg

如下

http://img1.sycdn.imooc.com//climg/6013eb16092d8d8b04810277.jpg

http://img1.sycdn.imooc.com//climg/6013ebbc09cf548208370401.jpg

所以这部分理解没问题

http://img1.sycdn.imooc.com//climg/6013ebe9094cdbdd08170160.jpg

2、实例化对象的过程有问题并缺少一步

http://img1.sycdn.imooc.com//climg/6013f0ef0935abc008670368.jpg

第一步和第二步是对的,第三步应该是改变this指向,将this指向实例化的对象,添加实例属性和方法;第四步是将实例化的对象赋值给变量person,也就是这一步的操作

http://img1.sycdn.imooc.com//climg/6013f15709100ea611000097.jpg

http://img1.sycdn.imooc.com//climg/6013f18209dfdded08130690.jpg

3、第三部分理解的有问题,和上面的理解类似

http://img1.sycdn.imooc.com//climg/6013f1c80941ca9b07900582.jpg

4、第四部分不常用

http://img1.sycdn.imooc.com//climg/6013f26f091f463207810460.jpg

5、第五部分可以描述完善一些

http://img1.sycdn.imooc.com//climg/6013f311093d377407670098.jpg

6、这部分理解没问题

http://img1.sycdn.imooc.com//climg/6013f32209c3a33607990096.jpg

祝学习愉快!

  • 提问者 CoffeePlayer #1

    谢谢老师耐心的解答,我又整理了如下,请老师帮我看一下是否正确


    任何函数内部都有一个prototype属性,这个属性以对象的形式存在,prototype属性中的constructor指向的是函数本身,而prototype属性中的__proto__指向的是的其父对象

    Object. 如下


    http://img1.sycdn.imooc.com//climg/60143b0c0982abf116240366.jpg

    http://img1.sycdn.imooc.com//climg/60143b21099a04d311840138.jpg


    如上,可以发现函数中的prototype属性包括两部分,prototype属性中的constructor指向的是函数本身,而prototype属性中的__proto__指向的是父对象Object.


    通过这个函数创建的每个对象中都有一个__proto__属性,这些对象在创建的时候将__proto__属性赋值为函数的prototype对象,如下

    http://img1.sycdn.imooc.com//climg/60143b52097d033215150420.jpg


    http://img1.sycdn.imooc.com//climg/60143b5d0902633615160348.jpg


    http://img1.sycdn.imooc.com//climg/60143b65090a2a0c09660750.jpg

    所以想要访问父Object对象,就通过如下两种方式

    http://img1.sycdn.imooc.com//climg/60143b800907c9c615110276.jpg


    http://img1.sycdn.imooc.com//climg/60143b8a09bdbb4316520104.jpg


    如上创建对象可以分为如下的四个步骤


    1. 创建一个空对象

    2. 让这个对象的__proto__赋值为Person.prototype

    3. 将this指向这个对象

    4. 将实例化的对象赋值给person变量


    子类通过原型prototype继承父类实例,如下

    http://img1.sycdn.imooc.com//climg/60143ba30956e54415120688.jpg


    http://img1.sycdn.imooc.com//climg/60143bae0967255d12840750.jpg


    通过上图可以发现,通过cat1.__proto__ 和 cat2.__proto__返回的是Animal对象

    http://img1.sycdn.imooc.com//climg/60143bc00910de4716620228.jpg

    http://img1.sycdn.imooc.com//climg/60143bc909e65e8814260290.jpg


    通过cat1.__proto__.__proto__.constructor返回的Animal函数,如下

    http://img1.sycdn.imooc.com//climg/60143bd809c89a6f17400104.jpg

    http://img1.sycdn.imooc.com//climg/60143bea094257fa13620142.jpg


    通过cat1.__proto__.__proto__.__proto__返回的才是Object对象

    http://img1.sycdn.imooc.com//climg/60143bf809cd74e117200118.jpghttp://img1.sycdn.imooc.com//climg/60143c0b099a9bae15560070.jpg




    2021-01-30 00:47:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师