模拟一个简单的继承
来源:互联网 发布:希尔排序算法动画演示 编辑:程序博客网 时间:2024/05/17 05:57
模拟一个简单的继承
有了上一节的基础,我们这一节来模拟一个简单的继承
Crab = function(){
this.leg = 10;
};
Crab.prototype.say = function(){alert('we hava '+this.leg+' legs')};
GenCrab = function(){//螃蟹进化成人,变成蟹将了,只有2条腿了
this.leg = 2;
}
function extend(child,father){//定义出一个继承函数,有2个参数,子类,父类
child.prototype = father.prototype;
}
extend(GenCrab,Crab);//这样一来,蟹将也有say的方法了
gCrab = new GenCrab();
gCrab.say();//执行出来 we hava 2 legs
怎么样,蟹将已经将螃蟹的方法继承下来了吧?那如果要将父类的属性也继承下来呢?我想到2个方法:
第一、把父类的属性写入prototype中,如Crab.prototype.leg = 10
第二、GenCrab.prototype = new Crab();不知道你能不能看懂,呵呵,估计网上都没有人这样用过,但这样子写能把属性和方法全部继承,其中的奥秘,请您自己思考下
好了,我们进入Ext的主题,那么Ext是怎么将属性继承下来的呢?答案是第一种方法。如果您仔细看过我写的第一篇文章,您一定会说,规范约定,只有方法才写在prototype中的呀,怎么能把属性也写入呢?岂不是把清楚的事情又弄复杂了?
聪明的Ext团队,的的确确是用第一种方法的,只是在写法上稍稍改变了下
function extend(child,father,override){//定义出一个继承函数,有2个参数,子类,父类,重载对象
child.prototype = father.prototype;
for(var m in override){//将重载对象里面所有的东西(这里说的东西,无非就是属性和方法)都拿出来赋给子类,作为子类的属性或者方法
child.prototype[m] = override[m];
}
}
这样一来,又有了新的规范了,把类的属性都往override里面写,把方法仍旧往prototype里面写,我下面举个例子
function extend(child,father,override){//定义出一个继承函数,有2个参数,子类,父类,重载对象
child.prototype = father.prototype;
for(var m in override){//将重载对象里面所有的东西(这里说的东西,无非就是属性和方法)都拿出来赋给子类,作为子类的属性或者方法
child.prototype[m] = override[m];
}
}
Crab = function(){
//这里不写属性了
};
extend(Crab,Object,{leg:10,eye:2});//让Crab继承绝对父类Object,并把属性写到这里来,因为螃蟹和蟹将都有2只眼睛,所以蟹将一会将继承这个属性
Crab.prototype.say = function(){alert('we hava '+this.leg+' legs, '+this.eye+' eyes')};//方法仍旧在这里定义
GenCrab = function(){
}
extend(GenCrab,Crab,{leg:2});//这里,眼睛和脚都从父类那里继承过来了,但蟹将只有2只脚,所以我们只需要覆盖脚这个属性就可以了
gCrab = new GenCrab();
gCrab.say();// we have 2 legs, 2 eyes
好了,属性和方法都已经可以继承了,Ext.extend也已经差不多成型了,请接着看第三节《Ext.extend三部曲》
Crab = function(){
this.leg = 10;
};
Crab.prototype.say = function(){alert('we hava '+this.leg+' legs')};
GenCrab = function(){//螃蟹进化成人,变成蟹将了,只有2条腿了
this.leg = 2;
}
function extend(child,father){//定义出一个继承函数,有2个参数,子类,父类
child.prototype = father.prototype;
}
extend(GenCrab,Crab);//这样一来,蟹将也有say的方法了
gCrab = new GenCrab();
gCrab.say();//执行出来 we hava 2 legs
怎么样,蟹将已经将螃蟹的方法继承下来了吧?那如果要将父类的属性也继承下来呢?我想到2个方法:
第一、把父类的属性写入prototype中,如Crab.prototype.leg = 10
第二、GenCrab.prototype = new Crab();不知道你能不能看懂,呵呵,估计网上都没有人这样用过,但这样子写能把属性和方法全部继承,其中的奥秘,请您自己思考下
好了,我们进入Ext的主题,那么Ext是怎么将属性继承下来的呢?答案是第一种方法。如果您仔细看过我写的第一篇文章,您一定会说,规范约定,只有方法才写在prototype中的呀,怎么能把属性也写入呢?岂不是把清楚的事情又弄复杂了?
聪明的Ext团队,的的确确是用第一种方法的,只是在写法上稍稍改变了下
function extend(child,father,override){//定义出一个继承函数,有2个参数,子类,父类,重载对象
child.prototype = father.prototype;
for(var m in override){//将重载对象里面所有的东西(这里说的东西,无非就是属性和方法)都拿出来赋给子类,作为子类的属性或者方法
child.prototype[m] = override[m];
}
}
这样一来,又有了新的规范了,把类的属性都往override里面写,把方法仍旧往prototype里面写,我下面举个例子
function extend(child,father,override){//定义出一个继承函数,有2个参数,子类,父类,重载对象
child.prototype = father.prototype;
for(var m in override){//将重载对象里面所有的东西(这里说的东西,无非就是属性和方法)都拿出来赋给子类,作为子类的属性或者方法
child.prototype[m] = override[m];
}
}
Crab = function(){
//这里不写属性了
};
extend(Crab,Object,{leg:10,eye:2});//让Crab继承绝对父类Object,并把属性写到这里来,因为螃蟹和蟹将都有2只眼睛,所以蟹将一会将继承这个属性
Crab.prototype.say = function(){alert('we hava '+this.leg+' legs, '+this.eye+' eyes')};//方法仍旧在这里定义
GenCrab = function(){
}
extend(GenCrab,Crab,{leg:2});//这里,眼睛和脚都从父类那里继承过来了,但蟹将只有2只脚,所以我们只需要覆盖脚这个属性就可以了
gCrab = new GenCrab();
gCrab.say();// we have 2 legs, 2 eyes
好了,属性和方法都已经可以继承了,Ext.extend也已经差不多成型了,请接着看第三节《Ext.extend三部曲》
- 模拟一个简单的继承
- 模拟一个简单的继承
- 继承的一个简单例子
- 一个简单的继承程序
- 模拟一个简单的时钟
- 类继承一个简单的例子
- lua 一个简单的继承/派生关系
- C++一个类的简单继承
- 一个简单的模拟车场的程序
- 一个简单的模拟shell的程序
- 自己模拟的一个简单的tomcat
- 观察者模式--一个简单的模拟
- hdu 1035很简单的一个模拟
- 代码---模拟一个简单的记事本
- servlet模拟一个简单的登陆
- javaScrip的模拟继承
- 一个简单的类的继承的写法(C#)
- 一个简单继承的例子,面试失败的教训
- JavaScript中字符串的替换方法
- java获取当月最大天数
- 取CPU号,硬盘号,网卡号
- Java访问权限
- 改变PropertyGrid中Property的编辑方式
- 模拟一个简单的继承
- JDK环境变量和Tomcat的Java_Home
- 彩票问题(lottery drawing)
- .net 调用windows系统常用功能
- JAVA基础篇 初学者入门必备的学习资料
- [转载]很有道理的十句话
- Fckeditor控件在文章发布系统中的应用
- 海量数据库的查询优化及分页算法方案
- 虚拟主机管理系统开发日志(1)