javascript类的继承与方法重写

来源:互联网 发布:手机美化软件 编辑:程序博客网 时间:2024/05/04 03:31
 

javascript类的继承与方法重写

作者:sagahu@163.com
日期:2011-12-26
这段代码演示了类的继承与方法重写:
         function Human(name, age) {        this.name = name;   // 成员属性如此定义        this.age = age;                // 第一种声明方法的办法:在类的内部直接声明        this.methodA = function() {             alert("Hello " + this.name);        }    }        // 第二种声明方法的办法:在类的外部通过“类.prototype.方法名 = function(){}”来定义    Human.prototype.methodB = function() { alert("Hello " + this.name); }        function Man(name, age) {        Human.call(this, name, age); // 这里调用基类的构造函数,来实现类的继承        this.sex = '男';                // 重写基类的方法methodA;无论基类的方法是在基类内部直接声明或是外部通过prototype声明的,都可以在这里这样重写        this.methodA = function() {            alert("Hello, Man " + this.name);        }    }        // 在子类外部通过prototype重写基类方法    Man.prototype.methodB = function() { alert("Hello, Man " + this.name); }        var obj1 = new Man("张三", 21);    obj1.methodA();    obj1.methodB();     alert(obj1 instanceof Man);    alert(obj1 instanceof Human); // 比较遗憾,这种实现继承的方式,instanceof测试会返回false       
总结如下:

一、实现类的继承

在子类构造函数内部,使用call函数调用基类构造函数,可以实现类的继承。

二、子类重写基类的方法

对于基类的方法,无论其是在基类内部直接声明的,还是后来在基类外部通过prototype扩展的,如果要在子类里重写它:
  • 都可以在子类内部直接重写;
  • 也可以在子类外部通过prototype重写基类的方法。
最后:其实在javascript中实现类继承的方式还有好几种,可以查阅相关资料。