js继承的三种实现

概念:在有些面向对象语言中,可以使用一个类(子类)继承另一个类(父类),子类可以拥有父类的属性和方法,这个功能可以在js中进行模拟。

 

三种方法:

第一种:扩展Object方法

 1 Object.prototype.ext=function(parObject){//Object.prototype.ext在原型链上定义的ext所有的对象都可以访问到
 2     //循环遍历父类对象所有属性
 3     for(var i in parObject){
 4         //为子类对象添加这个遍历到的属性
 5         //它的值是父类对象这个属性的属性值
 6         this[i] = parObject[i];
 7     }
 8 }
 9 function Person(p_name,p_age){
10     this.name=p_name;
11     this.age=p_age;
12     this.speak=function(){
13         alert(this.name+this.age);
14     }
15 }
16 function Student(p_no){
17     this.no=p_no;
18     this.say=function(){
19         alert(this.no+this.name_this.age);
20     }
21 }
22 var stu = new Student(101);
23 stu.ext(new Person('xiaoqiang',20));
24 stu.speak();
25 stu.say();

第二种:使用call和apply方法

 1 function Person(p_name,p_age){
 2     this.name=p_name;
 3     this.age=p_age;
 4     this.speak=function(){
 5         alert(this.name+this.age);
 6     }
 7 }
 8 function Student(p_no,p_name,p_age){
 9     this.no=p_no;
10     this.say=function(){
11         alert(this.name+this.age+this.no);
12     }
13     Person.call(this,p_name,p_age);//this是上下文,后面的参数是传递给person的参数,参数的先后顺序要一一对应,如果是用apply则后面的参数要用数组
14 }
15 var stu = new Student(8,'zhagsan',18);
16 stu.speak();
17 stu.say();

第三种:原型继承

 1 function Person(p_name,p_age){
 2     this.name=p_name;
 3     this.age=p_age;
 4     this.speak=function(){
 5         alert(this.name+this.age);
 6     }
 7 }
 8 function Student(p_no){
 9     this.no=p_no;
10     this.say=function(){
11         alert(this.name+this.age+this.no);
12     }
13 }
14 Student.prototype = new Person('wangwu',21);
15 var stu = new Student(10);
16 stu.speak();
17 stu.say();

 

posted on 2017-01-10 14:15  sunnie_c  阅读(148)  评论(0编辑  收藏  举报