//方法一 用apply
/*function Animal(){
this.species="动物";
this.setSpecies=function(s){return this.species=s;};
this.getSpecies=function(){return this.species;};
}
//Animal.prototype定义的不能继承 Cat类只能继承this.的属性
function Cat(name,color){
Animal.apply(this, arguments);
this.name = name;
this.color = color;
}
var cat1 = new Cat("大毛","黄色");
alert(cat1.species);//动物
cat1.setSpecies("植物");
alert(Cat.prototype.constructor);
alert(cat1.name);
alert(cat1.species);
alert(cat1.getSpecies()); */
//方法二prototype
/*function Animal(){
this.species="动物";
}
//注意Animal.prototype的定义不要放在Animal()中
Animal.prototype.setSpecies=function(s){return this.species=s;};
Animal.prototype.getSpecies=function(){return this.species;};
function Cat(name,color){
this.name = name;
this.color = color;
}
Function.prototype.extend=function(parent){
for(var proName in parent.prototype){
this.prototype[proName]=parent.prototype[proName];
//这里并不修改Cat.prototype.constructor
}
}
Cat.extend(Animal);
var cat1 = new Cat("大毛","黄色");
alert(cat1.species);//undefined
cat1.setSpecies("植物");
alert(Cat.prototype.constructor);
alert(cat1.name);
alert(cat1.species);
alert(cat1.getSpecies()); */
//方法三 prototype直接复制
/* function Animal(){
this.species="动物";
}
//注意Animal.prototype的定义不要放在Animal()中
Animal.prototype.setSpecies=function(s){return this.species=s;};
Animal.prototype.getSpecies=function(){return this.species;};
function Cat(name,color){
this.name = name;
this.color = color;
}
//Cat.prototype = new Animal();// 和下面的一句选其一
Cat.prototype =Animal.prototype;//修改Cat.prototype 会影响到Animal.prototype
Cat.prototype.constructor = Cat; //Cat.prototype.constructor 被修改 要变会原来的constructor
var cat1 = new Cat("大毛","黄色");
alert(cat1.species);//undefined
cat1.setSpecies("植物");
alert(Cat.prototype.constructor);
alert(cat1.name);
alert(cat1.species);
alert(cat1.getSpecies());*/
以上三种方法均可以实现javascript继承,但是只有第一种能完全继承属性和方法。