话就不多了,直接上代码吧,里面有注释都写的很清楚了,欢迎拍砖.
好久没来了..顺便三点分.
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <SCRIPT LANGUAGE="JavaScript">
  <!--
  // ----------------工具类--------------------
  var Class = {
/**
 * 继承原型,参考自<javascript设计模式>
 * 子类方法中调用父类的方法: Man.superclass.sayName.call(this);
 */
extend:function(subClass,superClass){
var F = function(){};
F.prototype = superClass.prototype;
subClass.prototype = new F();
// 避免父类的构造函数
subClass.prototype.constructor = subClass;

subClass.superclass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor){
superClass.prototype.constructor = superClass;
}
}
}Object.prototype.callSuper = function(superClass) {
if(arguments.length == 0){
throw new Error('callSuper方法必须含有一个参数');
}
var caller = arguments.callee.caller;
// 子类引用
var subInstance = this;
// 子类参数
var callerArgs = caller.arguments;
var argsArr = [];

for(var i=0,len=callerArgs.length; i<len; i++) {
argsArr.push(callerArgs[i]);
}

superClass.apply(subInstance,argsArr);
}
// ------------------------------------
// Demo
// 声明父类
var Person = function(param){
this.name = param.name;
this.age = param.age;
}
Person.prototype.sayName = function(){
alert("My name is " + this.name);
}
Person.prototype.sayAge = function(){
alert("My age is " + this.age);
}
Person.prototype.getAge = function(){
return this.age;
}
// 声明子类
var Man = function(param){
// 调用父类的构造函数
this.callSuper(Person);
}
// 继承父类
Class.extend(Man,Person);

// 覆盖父类的sayAge方法
Man.prototype.sayAge = function(){
alert(this.name + "'s age is " + this.age);
}
// 覆盖父类的方法,并且调用父类原来的方法
Man.prototype.getAge = function(){
// 先调用父类方法返回年龄
var age = Man.superclass.getAge.call(this);
// 年龄+1
alert(this.name + "'s age is " + (age + 1));
}
// 测试
var man = new Man({name:"Jim",age:22});
man.sayName(); // 这里调用父类的方法
man.sayAge();  // 这里调用自己的方法
man.getAge();  
// 
  //-->
  </SCRIPT>
 </HEAD>
 <BODY>   
 </BODY>
</HTML>