#题记:

有一水果类,抽象出属性包括:name(水果品种),price(价格),id(ID号)。现有两个子类,分别为苹果,桔子,希望继承水果父类。

一、构造函数继承

构造函数继承相当把父类的属性在子类执行一遍(可以理解为复制一遍),代码如下:

        //父类:水果类
function Fruit(name, price, id) {
this.name = name;
this.price = price;
this.id = id;
}
//苹果类
function Apple(name, price, id) {
Fruit.call(this, name, price, id); //执行一遍父类的属性
}
//桔子类
function Orange(name, price, id) {
Fruit.call(this, name, price, id); //执行一遍父类的属性
}
var apple = new Apple('苹果', '10.5', '001'); //实例苹果,可以传参了
var orange = new Orange('桔子', '8.5', '002'); //实例桔子,可以传参了
console.log(apple.name);
console.log(orange.price);

二、构造函数解决的优点和缺点

一、优点

构造函数解决了原型继承中不能向父类传参的问题,它能灵活的向父类传送参数。并且继承的属性完全属于自己,不会和其它的子类产生影响。示例图:

二、缺点

构造函数继承不能继承父类的原型方法,参照这些条件,自然想到可以将它们组合一起。

三、组合继承

组合继承即是把原型继承构造函数继承组合一起。

示例代码如下

        //父类:水果类
function Fruit(name, price, id) {
this.name = name;
this.price = price;
this.id = id;
}
Fruit.prototype.getInfo=function()
{
console.log(this.name + ',' + this.price + ',' + this.id);
}
//苹果类
function Apple(name, price, id) {
Fruit.call(this, name, price, id); //执行一遍父类的属性
}
//桔子类
function Orange(name, price, id) {
Fruit.call(this, name, price, id); //执行一遍父类的属性
}
Apple.prototype = new Fruit(); //继承了父类的原型方法
Orange.prototype = new Fruit(); //继承了父类的原型方法 var apple = new Apple('苹果', '10.5', '001'); //实例苹果,传参
var orange = new Orange('桔子', '8.5', '002'); //实例桔子,传参
apple.getInfo(); //输出'苹果', '10.5', '001'
orange.getInfo(); //输出'桔子', '8.5', '002'

一、组合继承的优点和缺点

优点是:几乎很完美了,既能独立继承父类的属性,也能继承父类的原型方法。

缺点是:父类的构造函数执行了两遍,一次在call调用时,一次在原型继承时。

深入浅出javascript(十二)继承——构造函数继承和组合继承的更多相关文章

  1. 从头开始学JavaScript (十二)——Array类型

    原文:从头开始学JavaScript (十二)--Array类型 一.数组的创建 注:ECMAscript数组的每一项都可以保存任何类型的数据 1.1Array构造函数 var colors = ne ...

  2. javascript面向对象(二):构造函数的继承

    本文来自阮一峰 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有 ...

  3. 【Java学习笔记之二十二】解析接口在Java继承中的用法及实例分析

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  4. 读书笔记_Effective_C++_条款三十二:确定你的public继承继承塑模出is-a关系

    这一条款是说的是公有继承的逻辑,如果使用继承,而且继承是公有继承的话,一定要确保子类是一种父类(is-a关系).这种逻辑可能与生活中的常理不相符,比如企鹅是生蛋的,所有企鹅是鸟类的一种,直观来看,我们 ...

  5. 深入浅出javascript(二)函数和this对象

    一.函数对象的属性和方法 函数是一种数据类型,也是对象,这一点很明确.因此,函数对象也可以添加属性和方法,但是这里的属性和方法是静态的,之所以这样说,就是为了区别构造函数. 示例如下: ①创建一个空的 ...

  6. 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(一)

    这一次我们深入的学习一下JavaScript面向对象技术,在学习之前,必要的说明一下一些面向对象的一些术语. 这也是全部面对对象语言所拥有的共同点.有这样几个面向对象术语: 对象 ECMA-262把对 ...

  7. javascript类继承系列四(组合继承)

    原理: 结合了原型链和对象伪装各自优点的方式,基本思路是:使用原型链继承原型上的属性和方法,使用对象伪装继承实例属性,通过定义原型方法,允许函数复用,并运行每个实例拥有自己的属性 function B ...

  8. 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(二)

    四原型方式 我们创建的每一个函数都有一个通过prototype(原型)属性.这个属性是一个对象,它的用途是包括能够由特定类型 的全部实例共享的属性和方法. 逻辑上能够这么理解:prototypt通过条 ...

  9. 《JAVASCRIPT高级程序设计》根植于原型链的继承

    继承是面向对象的语言中,一个最为津津乐道并乐此不疲的话题之一.JAVASCRIPT中的继承,主要是依靠原型链来实现的.上一篇文章介绍过,JAVASCRIPT中,每一个对象都有一个prototype属性 ...

  10. JS继承之借用构造函数继承和组合继承

    根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术( ...

随机推荐

  1. LIS LCS 最长上升子序列 最长公共子序列 ...

    最长上升子序列,问题定义:http://blog.csdn.net/chenwenshi/article/details/6027086 代码: public static void getData( ...

  2. .net中使用XPath语言在xml中判断是否存在节点值的方法

    book.xml<?xml version="1.0" encoding="utf-8" ?> <bookstore>  <boo ...

  3. u-boot之make all执行过程分析

    在执行make 100ask24x0_config之后就配置完成了针对JZ2440开发板的UBOOT,接下来需要执行make all进行编译链接最终生成u-boot.map.u-boot.srec.u ...

  4. c#按照回车换行符分割字符串

    string str="aaa\r\nbbscccjdddseee"; string[] sArray=str.Split(new char[2] {'\r','\n'}); 和用 ...

  5. iOS.KVC.setValue:forKey:

    Foundation Framework 定义了 NSObject(NSKeyValueCoding), - (void)setValue:(id)value forKey:(NSString *)k ...

  6. APP强制退出

    第一种方法: 企业版可以用,Appstore可能被拒,慎用 - (void)exitApplication { AppDelegate *app = [UIApplication sharedAppl ...

  7. Notification 通知传值

    通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便.便捷,一个简单的Demo实现通知的跳转传值.       输入所要发送的信息 ,同时将label的值通过button方法调用传递, ...

  8. kafka的advertised.host.name参数 外网访问配置

    kafka的server.properties文件 ```host.name```开始只绑定在了内部IP上,对外网卡无法访问. 把值设置为空的话会kafka监听端口在所有的网卡上绑定.但是在外网访问时 ...

  9. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  10. 会调色了不起吗? SORRY,会调色真的了不起!

    其实,现实的世界,大部分都是非常普通和常见的.所以调色师才有他们发挥的空间.如何把镜头中的世界变成梦幻一般. 把画面的颜色统一之后,逼格马上提升了很多! 发现表情不对,从其他照片把表情P回来,哈哈 这 ...