人的prototype之间的继承实现
<script type="text/javascript">
function Person(name){
this.name=name;
this.setName=function(name){
this.name=name;
}
this.getName=function(){
return this.name;
}
}
var p=new Person("张三");
alert(p.getName());
function Student(){
}
//var stu=new Student();//注意,实例化对象这句要写在对象指定原型后面,不然找不到,因为此时还没有指定原型
Student.prototype=p;//给学生的对象指定具体的原型 p
var stu=new Student();//要写在对象指定原型的下面,这样指定的原型才有效,才能调用
stu.setName("aaaaaaaaaaa");//调用原型中的方法
alert(stu.getName());//调用原型中的方法
</script>
动物类之间的prototype实现
<script type="text/javascript">
function Animal(name){
this.name=name;
}
Animal.prototype.setName=function(name){//用匿名函数设置动物的原型中的方法
this.name=name;
}
Animal.prototype.getName=function(){//用匿名函数设置动物的原型中的方法
return this.name;
}
Animal.prototype.eat=function(){
alert("吃东西");
}
var animal=new Animal("动物");//实例化动物函数
function Cat(){}
//Cat.prototype=Animal.prototype;//设定动物的原型与猫的原型相等,这样的继承虽然可以继承,但是关系很乱
Cat.prototype=animal;//将猫的原型指向动物,这里指向时一定是创建实例化后的对象,不能使Animal类
var c=new Cat();
c.setName("猫");
var name=c.getName();
alert(name);
//c.eat();//这是直接调用父类中的方法
/*c.eat=function(){//方式一:这里复写父类中的eat方法,但这种方法只能对该对象c有效,对新的Cat对象无效
alert("吃鱼");
}
c.eat();*/
Cat.prototype.eat=function(){//方式二:在猫的原型上复写eat的方法,这样其他的Cat对象也可以调用此复写后的方法,但是像其他的对象,如Dog也会调用此复写后的方法,所以这一点要注意
alert("吃沙丁鱼");
}
c.eat();
function Dog(){}
Dog.prototype=animal;
var d=new Dog();
d.setName("狗");
alert(d.getName());
d.eat();
</script>