由浅到深了解JavaScript类(5)

作者:泣红亭 来源:无忧脚本 时间:2008-06-16 13:20:00 

继承

继承这个词在面向对象的编程里是非常重要的,虽然JavaScript并不是真正面向对象的语言,而是跟VB一样是基于对象的语言,它同样提供了继承机制。

文章开头时谈到了男人与女人,这也同样是两个不同的类,但却具有相同的一些属性以及方法,而这些相同的特性是来自“人”这个类的,换句话说男人与女人继承了“人”的所有特性!但是男人与女人却有其不同的地方,编程语言里的继承也一样,一个类A继承了另一个类B,那么类B就是类A的父类,类A就是类B的派生类,也称为子类。比如男人就是人的派生类,而人就是男人的父类。最高一级的类称为基类,想象一下就可以明白,男人继承自人,男孩继承自男人,人就是男孩的基类,男人就是男孩的父类。

题外:多重继承

这里再涉及一个多重继承的话题,但如果你仅仅是学JavaScript的话就没有必要看下去,因为JavaScript不提供多重继承,准确一点说没有一种简单而标准的方法来实现多重继承(其实是有办法实现的,只不过麻烦了一点,而且确实没有必要)。
       
        在C++中是有多重继承的概念的,这里是讨论JavaScript,因此不打算讲,只是说说它的一点点思想以供参考。
       
        在上边男孩的继承问题中,男孩其实不仅仅是继承自男人,还继承自孩子(有男孩子,也有女孩子)这个类,因此,它同时继承了两个类:男人与男孩,这就是所谓的多重继承。
       
        好,这个问题打住,我们还是回归主题。
        >>>>>>>>>>>>>>>>>>>>
       
        先看第一个类的定义:

 function A()
        {
                this.Name = "泣红亭";
                alert(this.Name);
        }

这个类定义了一个属性Name,默认值为"泣红亭"
       
        现在看第二个类的定义:

 function B()
        {
                this.Sex = "男";
                alert(this.Sex);
        }

定义了一个属性Sex,默认值为"男"
       
        继承的方式就是 子类.prototype = new 父类();       
        现在我们来让B类继承A类:

 B.prototype = new A();

运行这一段代码:

  var Obj = new B(); //首先打开警告窗口显示"泣红亭",再显示"男"

可以从上边的结果看出B类继承了A类,拥有了A类的属性Name,并且执行了A类的构造函数,而且A类的构造函数在B类的构造函数执行之前执行。因此我们利用这个可以实现重写父类的方法以及重设置父类某属性的默认值:

  function A()
        {
                this.Name = "泣红亭";
                this.Show = function()
                {
                        alert("这是A类的Show方法");
                }
                alert(this.Name);
        }
        
        function B()
        {
                this.Name = "郑运涛";
                this.Show = function()
                {
                        alert("这是B类的Show方法");
                }
                alert(this.Name);
        }
        
        var Obj = new B();
        Obj.Show();

结果出现了三次警告窗口,第一个内容为泣红亭,是执行A类的构造函数里的alert(this.Name),那时候Name属性值还为"泣红亭",因为B类的构造函数还没执行,第二次内容为"郑运涛",这是B类里的alert(this.Name),因为B类的构造函数里给Name重赋值为"郑运涛"。最后是调用了Obj.Show(),执行了不是A类的Show方法里的Show(显示"这是A类的Show方法"),而是执行了B类的Show(显示"这是B类的Show方法"),很明显Show方法被重写了。

标签:类,javascript,编程
0
投稿

猜你喜欢

  • Python numpy下几种fft函数的使用方式

    2022-06-21 07:19:55
  • Django基础知识 URL路由系统详解

    2021-01-23 11:29:59
  • python SSH模块登录,远程机执行shell命令实例解析

    2022-07-24 21:09:22
  • Python获取时光网电影数据的实例代码

    2023-10-22 21:40:52
  • 基于RSA算法在asp中加密与解密对应的函数

    2007-11-07 21:39:00
  • PHP正则表达式替换<pre>标签外的内容

    2023-05-22 10:47:12
  • python基于queue和threading实现多线程下载实例

    2023-02-04 09:58:22
  • Python中xml和dict格式转换的示例代码

    2021-07-18 21:30:10
  • Python自然语言处理之切分算法详解

    2023-02-02 04:46:34
  • 详解Python如何制作自动发送微信的程序

    2021-06-04 13:24:53
  • 说说值类型数据“.”操作符的类型转换

    2009-12-13 10:39:00
  • MySQL批量更新的四种方式总结

    2024-01-13 17:53:08
  • python 给图像添加透明度(alpha通道)

    2021-05-04 04:57:22
  • Python实现的matplotlib动画演示之细胞自动机

    2022-05-23 15:49:09
  • C# 制作PictureBox圆形头像框并从数据库中读取头像

    2024-01-21 05:17:07
  • Python利用selenium建立代理ip池访问网站的全过程

    2021-12-03 11:41:26
  • Django发送邮件和itsdangerous模块的配合使用解析

    2023-09-11 04:29:00
  • 在Oracle 8x实现自动断开后再连接

    2010-07-26 13:03:00
  • 解决Jupyter-notebook不弹出默认浏览器的问题

    2023-01-12 23:59:37
  • Python基于execjs运行js过程解析

    2021-08-10 22:56:47
  • asp之家 网络编程 m.aspxhome.com