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