分类: 系统运维
2008-04-06 11:35:07
function ClassA(sColor){ this.color=sColor; this.sayColor=function(){ alert(this.color); } } function ClassB(sColor,name){ this.newMethod=ClassA; this.newMethod(sColor); //删除新方法,所有的新属性及其方法在之后定义 delete this.newMethod; this.name=name; //另外这里方法的定义如果采用从prototype //继承的方式效率更佳 this.sayName=function(){ alert(this.name); } } var b=new ClassB("red","biao"); b.sayColor(); b.sayName(); #使用对象冒充,ClassB并没有真正继承了CLassA.只是添加了CLassA中的方#法而已。 #可以使用alert(b instanceof ClassA)进行检验。 #使用对象冒充方式的继承具有如下的缺点。在实现多重继承时比如ClassZ从ClassX,ClassY继承, this.newMethod=ClassX;this.newMethod(..); delete this.newMethod; this.newMethod=ClassY;this.newMethod(..); delete this.newMethod; 若ClassX,ClassY中存在方法重名的现象则只会使用CLassY中的方法,因为它是在ClassX之后被继承的。 |
function ClassB(){} ClassB.prototype=new ClassA("yellow"); ClassB.prototype.sayName=function(){ alert(this.name); } var b=new ClassB(); b.color="red" b.name="biao" b.sayColor(); b.sayName(); alert(b instanceof ClassA);//true alert(b instanceof ClassB);//true #输出是一样的。 |
function ClassA(sColor){ this.color=sColor; } ClassA.prototype.sayColor=function(){ alert(this.color); } function ClassB(sColor,name){ ClassA.call(this,sColor); this.name=name; } ClassB.prototype=new ClassA(); ClassB.prototype.sayName=function(){ alert(this.name); } var b=new ClassB("red","biao"); b.sayColor(); b.sayName(); |