js 模拟“类”继承

来源:互联网 发布:小学生学汉字软件 编辑:程序博客网 时间:2024/06/01 09:07

 javascript中实际上是没有类这个概念的,他的类是在方法的基础之上的,因此实现类继承的思想是把父类的属性和方法指向子类。(个人理解)

 

JavaScript 中的继承可以通过原型链来实现,调用对象上的一个方法,由于方法在JavaScript 对象中是对

另一个函数对象的引用,因此解释器会在对象中查找该属性,如果没有找到,则在其内部对象prototype 对象

上搜索,由于prototype 对象与对象本身的结构是一样的,因此这个过程会一直回溯到发现该属性,则调用该

属性,否则,报告一个错误。关于原型继承,我们不妨看一个小例 子

 

function Base(){this.baseFunc=function(){alert("base behavior");}}function Middle(){this.middleFunc=function(){alert("middle behavior");}}Middle.prototype=new Base();function Final(){this.finalFunc=function(){alert("final behavior");}}Final.prototype=new Middle();function test(){var obj = new Final();obj.baseFunc();//base behaviorobj.middleFunc();//middle behaviorobj.finalFunc();//final behavior}test();

 

 

例子二:

function ClassA(sColor) {this.color = sColor}ClassA.prototype.sayColor = function () {alert(this.color);}function ClassB(sColor, sName) {    //执行ClassA(sColor)方法,但是里面的this现在已经是ClassB了,但是sayColor方法没有继承过来,因为是在prototype原型链表后的,只有new ClassA才能继承,这个方法的目的就是实现属性的继承ClassA.call(this, sColor);this.name = sName;}//将ClassA链表后面的方法赋值给ClassB.prototype,这样sayColor方法也就在ClassB链表后面,实现方法继承ClassB.prototype = new ClassA();ClassB.prototype.sayName = function () {alert(this.name);}var obja = new ClassA("RED");var objb = new ClassB("blue", "huangbiao");obja.sayColor();//REDobjb.sayColor();//blueobjb.sayName();//huangbiao

 

 使用运行构造方法实现继承

function ClassA(sColor) {this.color = sColor;this.sayColor = function () {alert(this.color);}}function ClassB(sColor) {}function ClassB(sColor, sName) {//定义一个构造方法属性,然后运行这个构造方法,实际上就是运行父类ClassA,将它的属性和方法全部继承过来,因为这个this指向的是ClassB而不是ClassA了this.struct = ClassA;this.struct(sColor);//删除这个构造属性,但是够着属性里面的内容已经继承过来了,因此删除这个多余的属性delete this.struct;this.name = sName;this.sayName = function () {alert(this.name);}}var obja = new ClassA("RED");var objb = new ClassB("blue", "huangbiao");alert(objb.color);//blueobja.sayColor();//REDobjb.sayColor();//blueobjb.sayName();//huangbiao

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾照扣了38分怎么办 新疆转入山东上学怎么办手续 驾照过日期换证怎么办 机动车被扣24分怎么办 车辆被扣24分怎么办 现在深圳牌十年老车怎么办? 护士证过期4年了怎么办 护士资格证延续注册过期了怎么办 护士资格证过期没注册怎么办 护士资格证注册时间过期怎么办 辅警体检视力不行怎么办 护士延续注册体检怀孕怎么办 护士资格证没有延续注册怎么办 申请信用卡没有座机号码怎么办 网上申请信用卡没有座机号码怎么办 我叫上门服务被骗了怎么办 上门服务被骗了3000多怎么办 微信被骗9000元怎么办 奥迪a8气囊灯亮怎么办 驾考站岗迟到了怎么办 老板欠员工工资不给怎么办 如果有一天我没头发了怎么办 苏州公积金密码忘了怎么办 科二考试第二把怎么办 科一老是记不住怎么办 科目二考试没去怎么办 网约车驾龄不到怎么办 科四预约不上怎么办 教练不退钱怎么办找谁 驾考出入证丢了怎么办 科二成绩单丢了怎么办 考驾照的准考证丢了怎么办 驾考预约去不了怎么办 科目一预约没去怎么办 打狂犬疫苗期间感冒了怎么办 公司社保欠费不交怎么办 25号社保不交怎么办欠费 会计从业停考了怎么办 黑龙江龙育黄了档案怎么办 科目四档案丢了怎么办 从上海调档案到杭州怎么办