`

通过代码明白继承那些事

 
阅读更多

1.首先写两个构造函数,父类拥有两个属性.name和数组arr

//父类
function Super(){
     this.name = null;
     this.arr = [];
}

//子类
function Sub(){
   
}

 2.让子类Sub继承父类的原型链中所有属性和方法,先不考虑constructor

Sub.prototype = new Super();

 

3.实例化一个子类对象.并打印属性值.结果为sub1和 1.结果正确

var sub1 = new Sub();
sub1.name = "sub1";
sub1.arr[0] = 1;

alert("name:"+sub1.name+","+"arr:"+sub1.arr[0]);

 4.重点来了,我们再来实例化一个变量。并且直接打印name和arr[0]属性。这个时候发现。name是属于自己的没有问题。但是arr[0]却把sub1的值也打印出来了。

var sub2 = new Sub();

alert("name:"+sub2.name+","+"arr:"+sub2.arr[0]);

总结:直接揭晓答案吧。因为在原型链中继承的时候。如果是值引用的属性直接继承没有问题。但是如果是地址引用的属性。则所有的实例会共用同一个属性。也就是说 arr是一个数组。属于地址引用。所以sub1和sub2会共用这个属性。因此在继承的时候要尽量避免继承父类中的值引用属性.如果不可避免可以在子类中单独声明这个变量。就是说把Super中的arr属性 移到Sub构造函数中。如果父类中的地址引用属性太多。那么最好是在子类构造中,重新调用父类构造。

分享到:
评论

相关推荐

    C++类继承,访问权限,有源码参考

    C++类继承 源代码,如果看不明白可以与作者联系

    OpenCV代码参考文档(压缩文件-分卷2)

    使用doxygen生成的OpenCV代码参考文档,只包含core和ml模块的文档,内部含有按照字母排序的索引,可以按照字典顺序快速查找,还有使用dot生成的类继承关系图和类协作关系图,可以一目了然的明白OpenCV一些类的关系。...

    ZheBie数据库封装源代码(VC)-ZheBie-2.2-110426.rar

    最近需要写一个ERP的软件,自己闲来无事,就花了2周时间改写了delphi的代码,使用MS.NET 2003实现了一下 在使用MS.NET 2003实现的过程中也发现了原来程序的一些bug 如果你有兴趣,也可以参考一下 ---------- 说明 -...

    vc webservice代码调用文档(中英俩个文档)

    主要是通过vc代码调用soap的 webservice文档,文档写的比较明白 参考这个修改即可,但是最后写出自己的继承类 方便以后使用。

    客户关系管理系统的源代码

    权限管理是根据window2000仿照的,即分角色管理,系统录入了所有需要控制的权限,然后设置角色,每个角色设置包含了那些需要控制的权限,每个用户有可以继承角色和一些附加权限。 2. 流程控制 流程控制也就是工作流程,...

    镜子反光小游戏。

    这些时间有些空闲,就打算写个有些难度的小游戏玩玩... 有C++基础,对于继承和多态性了解的同学很容易明白。 里面有fastdelegate库,我都不记得用没有用到它。 就当给初学者一些学习参考吧。 有什么问题可以联系我。

    尚硅谷-实验-继承&super;.pdf

    ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千...

    讲解JavaScript的面向对象的编程

    本人在带学生使用EXT框架时,我发现...5. 当你认真阅读了以上代码之后,相信再看Ext的sample代码时,应该看得非常明白了--因为它就是使用基于基本类库的JavaScript的面向对象的代码。 这是一个非常好的Ajax开源框架!

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    魔法值是指程序中随意定义并赋值的变量值,如果代码编写者明白变量值意义是可以任意使用的,例如在代码中写if(status == 3) return error;符合规范。 C .如果变量值仅在一个范围内变化推荐用Enum类。 D .在程序...

    Qt中怎么用Ui文件

    单继承方式简单来说就是在代码中首先要自定义一个子类(后文称为MyForm),该类要从form对应的窗体类(或其兼容的子类)派生;并用ui生成的类定义一个类里的成员变量(后文成文myui)。这样在MyForm的构造函数中可以...

    两分钟让你彻底明白Android Activity生命周期的详解(图文介绍)

    大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也...Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码: 代码如下: public class Activity extends ApplicationCont

    异常以及异常中常用到的类

    在这里我们必须要明白无论会不会出现异常,finally代码块里面的代码都是必须执行的,finally块不执行的唯一情况是:在异常处理代码中执行System.exit(1),将退出java虚拟机! 最后我写点我们在学习和工作的时候常见的...

    Python练习集100题.rar

    并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools,...

    从实例谈面向对象编程、工厂模式和重构

    如果你在最开始没有体会到 IMedia 接口的好处,在这里你应该已经明白了。我们在工厂中用到了该接口; 而在主程序中,仍然要使用该接口。使用接口有什么好处?那就是你的主程序可以在没有具体业务类的时 候,同样可以...

    C++使用初始化列表的方式来初始化字段的方法

    几个月之前,接触Android recovery源代码的时候,看ScreenRecoveryUI类的时候,那时候C++基础还不是特别好,一直不明白以下的初始化方式: 下面这个是Recovery的一个构造函数,代码位于:screen_ui.cpp,它的类的...

    Android RecyclerView的Item自定义动画及DefaultItemAnimator源码分析

    这是关于RecyclerView的第二篇,说的是如何自定义Item动画,但是请...先弄明白一件事,DefaultItemAnimator继承自SimpleItemAnimator,SimpleItemAnimator继承自RecyclerView.ItemAnimator,所以如果需要自定义动画,最

    python SocketServer源码深入解读

    我们先看上面的代码,这是一个简单的类继承,我们可以看到父类Base和子类Son,它们中各有一个Testfunc方法,当我们实例化子类的对象sonobj时,可以看到初始化方法中黄色框框调用了Testfunc,那么这个时候执行的是...

    利用javascript中的call实现继承

    虽然到现在还是不太明白.怎么实现的.但还是贴出来. 实现setTimeout传object对象 看以下代码实现向里面的function 传参数 [removed] var _st = window.setTimeout; window.setTimeout = function(fRef, mDelay...

    Asp.Net MVC 分页、检索、排序整体实现代码

    这里自己实现一次,功能不是高大全,但求一个清楚明白,也欢迎园友拍砖。前端是bootstrap3+jPaginate,后台基于membership。没什么难点。 先上效果图。 分页其实就是处理好 每页项目数、总项目数、总页数、当前页。...

    as3 接口类的用法和好处

    若继承结构复杂,可能有的继承两至三级甚至更多,在不知道继承级别的情况下,用 getQualifiedSuperclassName想知道对象的继承关系链里是否存在textClass或者shapeClass,就只能通过遍历至 顶级类来检验了......不但...

Global site tag (gtag.js) - Google Analytics