javascript继承的三种方法

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方式是继承父类的类属性

时间: 2024-07-30 10:07:44

javascript继承的三种方法的相关文章

面向面试编程——javascript继承的6种方法

javascript继承的6种方法 1,原型链继承 2,借用构造函数继承 3,组合继承(原型+借用构造) 4,原型式继承 5,寄生式继承 6,寄生组合式继承 1.原型链继承. <script type="text/javascript"> function Person(name,sex) { this.name=name; this.sex=sex; this.friends=['李四']; this.getName=function(){ alert(this.name

Javascript定义类(class)的三种方法

注:本文转自阮一峰,觉得此篇文章对我对大家有帮助,因此转过来. 将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越庞大的项目.Javascript代码的复杂度也直线上升.单个网页包含10000行Javascript代码,早就司空见惯.2010年,一个工程师透露,Gmail的代码长度是443000行! 编写和维护如此复杂的代码,必须使用模块化策略.目

JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链 JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法 1.Object类 在JS中,Object是所有类的基

javascript oop编程 — 实现继承的三种形式

javascript  oop编程  - 实现继承的三种形式[1] (1)模拟类的方式, 我们都知道js是原型继承机制,不存在class和instance分离的这种方式 假设,我们有两个类 function  Animal(){ this.name = "animal"; this.eat = function(){ consle.log("eating"); } } function Cat(){ this.say = function(){ console.lo

JavaScript高级程序设计--对象创建的三种方法

创建对象的三种方法: 1.工厂模式 工厂模式是软件工程领域广为人知的设计模式,这种模式抽象了创建具体对象的过程.下面是使用工厂函数创建对象的的一个例子. 2.构造函数: 从上面的例子中,我们看到构造函数与工厂函数不同之处: 1.没有显式的创建对象 2.直接将属性和方法赋给了this对象,没有return语句 另外,函数名Person使用了首字母大写.(这是一个惯例,构造函数始终都应该以一个大写字母开头,而非构造函数应该以一个小写字母开头.) 使用构造函数来创建对象,意味着你可以获取对象的类型.这

javascript浮点数转换成整数三种方法

将浮点数转换成整数方法有很多,分享三种常用方法. Summary 暂时我就想到3个方法而已.如果读者想到其他好用方法,也可以交流一下 parseInt位运算符Math.floor Math.ceil Description 一.parseInt 1. 实例 parseInt("13nash");//13 parseInt("")// NaN parseInt("0xA") //10(十六进制) parseInt(" 13")/

Html5 页面中 JavaScript 启动调用的三种方法比较

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 首先,来看一下 Html5 页面引用 JavaScript 代码的几种方式: 1.Html5 页面中使用 <script>  标签容纳

JavaScript里面向对象的继承:构造函数&quot;继承&quot;的五种方法

//现在有一个"动物"对象的构造函数. function Animal(){ this.species = "动物"; } //还有一个"猫"对象的构造函数. function Cat(name,color){ this.name = name; this.color = color; } 怎样才能使"猫"继承"动物"呢? 一. 构造函数绑定 第一种方法也是最简单的方法,使用call或apply方法,将父对

javascript生成对象的三种方法

/** js生成对象的三种方法*/ // 1.通过new Object,然后添加属性 示例如下: var people1 = new Object(); people1.name = 'xiaohailong01'; people1.age = 31; alert("name:" + people1.name + ", age:" + people1.age); // 2.直接接收json数据生成 var people2 = { name : 'xiaohailon