代码摘自于高程3面向对象一章。由于本人嘴笨,将问题写在了以下代码中。自己愚笨,还望知点解答,谢谢!functionSuperType(name){this.name=name;this.colors=['red','blue','green']}SuperType.prototype.sayName=function(){alert(this.name)}//----以上是构造行数functionSubType(name,age){SuperType.call(this,name)//这里利用了借用构造函数将SuperType的属性继承过来(借用构造函数只能获得构造函数属性,无法获得构造函数方法)this.age=age//只属于SubType的属性}//----以上普通函数SubType,其中借用了构造函数SuperType的属性(this.name、this.colors)SubType.prototype=newSuperType()//----SubType的原型通过原型链继承自构造函数SuperType(SuperType.prototype,也就是sayName方法)SubType.prototype.constructor=SubType//----由于重写了SubType的原型,所以需要重新定义constructor=SubTypeSubType.prototype.sayAge=function(){alert(this.age)}//----问题1在这里://----由于SubType.prototype是实例化构造函SuperType(原型链继承了构造函数SuperType的方法sayName)//----那么为SubType的原型追加了sayAge方法,是否SuperType.prototype也会相应增加sayAge方法?如果是的话下方代码instance2.colors中为何没有blackvarinstance1=newSubType('Nicholas',29)//----问题2在这里://----由于SubType.prototype=newSuperType(),SubType.prototype会修改构造函数的原型//----这里instance1是SubType的实例,那么instance1是否也会随原型链,指向SuperType()的原型?instance1.colors.push('black')alert(instance1.colors)//red,blue,green,blackinstance1.sayName()//'Nicholas'instance1.sayAge()//29varinstance2=newSubType('Greg',27)alert(instance2.colors)//red,blue,greeninstance2.sayName()//'Greg'instance2.sayAge()//27综上所述,感觉根源还是自己并没有太理解这种组合方式,是如何同时兼顾原型方法共享又同时存在自身属性
添加回答
举报
0/150
提交
取消