首页 > 其他分享 >浅谈一下原型继承中我对原型链的理解

浅谈一下原型继承中我对原型链的理解

时间:2023-09-26 23:56:49浏览次数:51  
标签:浅谈 Phone 继承 brand 对象 原型 prototype 属性

在学习JS语法中,我知道了任何一个类都拥有一个原型对象prototype,这个内置对象的好处在于不用每次new对象时都为对象开辟一个内存空间指向函数,可以使所有实例化对象共享一个属性。

但是在JS中的继承却和其他语言有些差异。今天学习了原型继承之后,先给大家看一下基本的代码。

 首先我定义了一个Phone类,接着又定义了一个SmartPhone类,按照Java继承的思想来说,要想让智能手机类是Phone类的子类,就应该让它能够获取到brand price

我一开始想到的是通过给SmartPhone类的原型对象设置属性,但这样的话就没啥意义了。

至于为什么要使用   SmartPhone.prototype = new Phone 这个代码,我这里举个例子

假设有一个Person类,然后有一个Man和一个Woman类,当我给这两个子类的prototype都设置为Person的时候,尽管子类均可获取到父类的属性,但是因为Person是地址引用。

也就是说男人类和女人类的原型对象都引用了person类,如果女人类要新增一个生孩子的函数,这样的话男人类也会具备这个属性,很显然不满足要求

因此我们需要通过New的方式进行原型对象的赋值。

原型链的寻址过程为:先去实例对象的属性里面找有没有,没有的话就去原型对象的属性里面找,还是没有的话,继续一层一层找,直到Object类的prototype为null(毕竟是超类).

最后说一下这一行代码

Phone.call(this, brand, price); call函数的作用是将这个方法的调用者改变为this所指向的对象,这里的话因为调用的实例者是SmartPhone对象,因此你可以理解为只有这一个实例化对象具备brand和price属性, 当然你一定要区分开,智能手机类的原型对象因为是new出来的,所以说brand和price属性的值是未定义,也就是undefined 加油,每一位奋斗者!!

 

标签:浅谈,Phone,继承,brand,对象,原型,prototype,属性
From: https://www.cnblogs.com/laohei114514/p/17731601.html

相关文章

  • JavaSE day01【复习回顾面向对象基础、继承、抽象类】测评
    选择题题目1(单选):下列关于Java中类与类之间的关系描述正确的是()选项:​ A.Java中类与类属于多继承,还可以多层继承​ B.Java中类与类属于实现关系,可以单实现也可以多实现​ C.Java中类与类属于实现关系,可以只能单实现​ D.Java中类与类属于单继承,......
  • 类和继承
    类今日份学习类的继承,Object类和Object类中的三个重要方法(getClass()方法,toString()方法,equals()方法)。类的继承   继承使整个程序架构具有一定的弹性,它不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性。    在JAVA语言中,一个类继承另一个类需要使用关键字ex......
  • 浅谈数学性质与数据结构
    交换律:当式子具有交换律时,我们可以考虑序列颠倒做两遍,算多了整体除二,强制钦定顺序等手段,优雅的解决这类问题。https://codeforces.com/contest/1635/problem/F 结合律:当发现维护的内容,存在结合律时,可以考虑线段树维护(需要支持信息快速结合),静态问题可以考虑猫树 重复消去......
  • 继承
    继承是一种创建新类的方式,新建的类可以称为子类或者派生类,父类又可以称为基类或者超类 需要注意的是:python支持多继承再python中,新建的类可以继承一个或者多个父类继承格式:classParent1:passclassParent2:passclassSub1(Parent1):单继承passclassSub1(Parent1,Pare......
  • 浅谈UE4的序列化
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、结合用例浅谈UE4序列化1.1需求我写文章,不爱一上来就讲道理、贴代码,而是喜欢先提需求、提问题,然后围绕这个需求的实现再一步步挖掘源码。我们......
  • 继承、方法重写
    权限修饰符 方法重写:当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。 子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限(public>protected>缺省)。......
  • 15,面向对象原型继承
    子类对象名.__proto__=父类对象名;varuse={name:'岳不群',age:123,ff:function(){console.log(this.name+'在跑步');}};varniao={fei:function(){console.log(this.name+'在飞');}};varliyu......
  • 封装继承多态和instanceof
    封装一般利用私有private把属性私有,使其无法被调用,想要调用就必须使用get/set快捷键Alt+insert方法来将其使用,它可以增强我们程序的安全性,同时再set的方法中我们可以加入关于变量能否被调用的一些限制get/set输出私有变量方法继承继承是类与类之间的关系,我们可以让子类通过ex......
  • 浅谈PCBA加工中的阻焊设计的意义有哪些
    相信从事PCBA加工行业的同事都知道PCB的阻焊设计,阻焊层在控制PCBA焊接工艺的好坏中扮演着重要的角色,合理的阻焊设计时是保证PCBA焊接的主要因素之一,在设计PCB时应尽量减小焊盘特征周围的空隙及空气间隙,不适当的PCB阻焊设计会导致PCBA加工缺陷。下面就有贴片加工厂_安徽英特丽小编为......
  • python面向对象的三大特性:封装性、继承性、多态性
    python面向对象的三大特性:封装性、继承性、多态性一、python中的封装在python代码中,封装具有两层含义:①在把现实世界中的实体中的属性和方法写到类的里面的操作即为封装。classPerson(object):#封装属性#封装方法②封装可以为属性和方法添加私有权限(属性和方......