javascript类的继承与方法重写

 

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中实现类继承的方式还有好几种,可以查阅相关资料。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值