码迷,mamicode.com
首页 > 编程语言 > 详细

javascript继承的三种方法

时间:2015-09-05 23:38:39      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

javascript并不是纯粹的面向对象的语言,因此也没有明确的继承方式,但可以通过一些方式来模拟继承。本文总结常见的javascript继承模拟方式

1,对象继承

//父类
function Person(name,age){
    this.name = name;
    this.age = age; 
};

Person.prototype.height = "170cm";

//子类
function Boy(){
    this.speak = function(){
        alert("我是子类");
    }; 
};

//继承方式
Boy.prototype = new Person("XiaoMing","20");

//测试
var boy = new Boy();
boy.speak();    //我是子类
alert(boy.name);  //XiaoMing
alert(boy.age);  //20
alert(boy.height);  //170cm

该种方式的继承方法为将子类的原型对象设置为父类的实例对象

该方法的优点是既继承了父类的类属性,又继承了父类原型对象中的属性

缺点是创建子类对象时如果需要传递参数,则只能用父类来接收参数,不太灵活,语法上也不面向对象

 

2,类继承

//父类
function Person(name,age){
    this.name = name;
    this.age = age;
}
Person.prototype.height = "170cm";

//子类与继承方式
function Boy(name,age){
   Person.call(this,name,age);
   this.speak = function(){
        alert("我是子类");
   }
}

//测试
var boy = new Boy("XiaoMing","20");
boy.speak(); //我是子类
alert(boy.name);  //XiaoMing
alert(boy.age);  //20
alert(boy.height);  //undefined

这种继承实际上就是在子类函数中通过call调用父类函数

优点是创建子类时传递参数不需要传递给父类,比较灵活,缺点是只能继承父类的类属性无法继承父类的原型对象里的属性

 

3,混合继承

//父类
function Person(name,age){
    this.name = name;
    this.age = age;
}

Person.prototype.height = "170cm";

//子类及继承方式
function Boy(name,age){
    Person.call(this,name,age);
    this.speak = function(){
        alert("我是子类");
    }
}

Boy.prototype = new Person();

//测试
var boy = new Boy("XiaoMing","20");
boy.speak();  //我是子类
alert(boy.name);   //XiaoMing
alert(boy.age);    //20
alert(boy.height);  //170cm

这种继承方式实际上是上两种方式的结合体,因此既有第二种方式的灵活,又有第一种方式的全面

Boy.prototype = new Person();  这一句中没有传递参数,该句作用是继承父类的原型对象里的属性,而call方式是继承父类的类属性

javascript继承的三种方法

标签:

原文地址:http://www.cnblogs.com/JTechER/p/4784190.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!