我们知道,在OO语言中,继承可分为接口继承和实现继承。而ECMAScript的函数没有签名,不能实现“接口继承”,只能通过原型链实现“实现继承”。

  在学习了各种继承模式之后,简单总结一下各种继承模式的特点:

  1、原型链继承

    问题:子类实例共享超类属性、不能向超类的构造函数传递参数

  2、借用构造函数

    思想:子类构造函数调用超类构造函数,使用call或apply,那么在实例化子类对象时就会有不同的对象实例,解决了共享超类属性的问题

  3、组合继承(原型链+借用构造函数)

    问题:会两次调用父类构造函数,同时还在子类的prototype中添加了多余的属性

  4、寄生式继承

    思想:与寄生构造函数和工厂模式类似,任何能够返回新对象的函数都适用于此模式,缺点是不能做到函数复用

  5、寄生组合式继承

    思想:集寄生式继承与组合继承的优点于一身,是实现基于类型继承的最有效方式

  

JS高级程序设计学习笔记——继承的更多相关文章

  1. JS高级程序设计学习笔记之第三章基本概念(语法,数据类型,流控制语句,函数)——查漏补缺

    一.语法: 区分大小写; 2.标识符:就是指变量.函数.属性的名字,或者函数的参数 a.标志符的规则:①第一个字符必须是一个字母.下划线(_)或一个美元符号($).                   ...

  2. JS高级程序设计学习笔记1

    javascript产生的原因: 在拨号上网时代,表单数据必须发送到服务器端才能验证输入值得有效性,JavaScript的研发就是为了解决这个问题,以便在客户端就验证输入值的有效性. ECMAScri ...

  3. JS高级程序设计学习笔记之基本包装类型

    概述 基本类型:string.boolean.number 每当读取一个基本类型的值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据. 使用new操作符创建的 ...

  4. JS高级程序设计学习笔记之RegExp类型

    创建正则表达式: 字面量形式定义正则表达式: Var expression = / pattern /flags ;pattern部分可以使任意简单或复杂的正则表达式.每个正则表达式可以带有一个或多个 ...

  5. JS高级程序设计学习笔记之Date类型

    日期对象的创建:var now =new Date(),不传递参数时,对象自动获取当前时间.(若要创建特定日期与时间的对象,必须传入该日期距离1970/1/1零点的毫秒数). Date.parse() ...

  6. JS高级程序设计学习笔记之数组

    数组创建的方式 var str = new Array();放入数字即为设置数组长度 var str = []; 数组的length可读可写 监测数组 Array.isArray()方法确定某个值是不 ...

  7. JS高级程序设计学习笔记之JS事件(1)

    事件流 冒泡 定义:事件开始时由最具体的元素接收,然后逐级上传到较为不具体的节点.(IE9.FF.Chrome.Safari会将事件一直冒泡到window对象.IE5.5及其以下会跳过<html ...

  8. 《JS高级程序设计》笔记 —— 解析查询字符串

    今天在继续翻阅<JS高级程序设计>的时候,正好翻到location对象这一小节,其中有一部分就是讲的解析查询字符串.看到这个内容立马想到了做去哪儿秋招笔试题的时候有这么一道题. 去哪儿笔试 ...

  9. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

随机推荐

  1. SQLite高级:一库建多表,封装类

    package eoe.database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; ...

  2. JDBC executeBatch 抛出异常停止

    进行批量更新的时候发现: addBatch(sql); executeBatch 抛出异常后,剩余的sql没有更新,即出现异常之前的都入库了,异常之后即使有可执行sql都不会执行. 百度资料后了解:这 ...

  3. mysql,mybatis使用中遇到的类型转化的问题

    产生原因还没有明白,先记录一下. 使用DATEDIFF函数,计算两个日期的时间差.在mybatis中,resultType 是map.在代码中,根据map的key取值的时候. 在mysql 5.5.3 ...

  4. iOS 约束,设置文字控制的高度

    在使用xib或者storyboard进行界面开发和设置约束时,会遇到文字控件,下个控件到文字控件的距离设置. 由于文字控件的大小和文字本身的大小是不同的,那就会造成“设置位置”与设计图的比例不同. 怎 ...

  5. Jenkins中deploy插件的deploy war/ear to a container与deploy artifacts to maven reepository区别

    deploy war/ear to a container:发布war包到服务器 deploy artifacts to maven reepository:发布到maven服务器

  6. javaEE开发中使用session同步和token机制来防止并发重复提交

    javaEE开发中使用session同步和token机制来防止并发重复提交 通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交.比如在登陆过程中,通过使用redirect,可 ...

  7. 11g oracle 用户密码过期问题

    Oracle 11g 之前默认的用户时是没有密码过期的限制的,在Oracle 11g 中默认的profile启用了密码过期时间是180天.如下:select * from dba_profiles w ...

  8. Spring 使用context:annotation-config的设置

    Spring 使用context:annotation-config的设置: 还是需要声明Bean的,并且还可能自己定义Annotation: xml: <?xml version=" ...

  9. MyBatis-Generator的配置说明和使用

    关于MyBatis: MyBatis Generator (MBG) 是一个Mybatis的代码生成器 MyBatis 和 iBATIS. 他可以生成Mybatis各个版本的代码,和iBATIS 2. ...

  10. 二分查找 - vb.net

    Module Module1    Sub Main()        Dim array(999) As Integer        Dim searchValue As Integer      ...