原型链是实现继承的主要方法,通过原型能让一个引用类型继承另一个引用类型。

1.原型链实现继承

function SuperType(){
this.superprop=1;
}
SuperType.prototype={
showSuperprop:function(){
console.log(this.superprop);
}
}
function SubType(){
this.subprop=2;
}
SubType.prototype=new SuperType();
SubType.prototype.showSubprop=function(){
console.log(this.subprop);
}
var s=new SuperType();
s.showSuperprop();//
var s2=new SubType();
s2.showSuperprop();//
s2.showSubprop();//

注意:在使用原型链实现继承时,不能用对象字面量方法创建原型方法。

2.借用构造函数

在子类型构造函数内部调用超类型的构造函数。

function SuperType(){
this.numbers=[1,2,3];
}
function SubType(){
SuperType.apply(this);
}
var s=new SubType();
s.numbers.push(4);
console.log(s.numbers);//1,2,3,4
var s1=new SubType();
console.log(s1.numbers);//1,2,3

* 3.组合继承--原型链结合借用构造函数

使用原型链实现对原型对象属性和方法的继承,使用构造函数实现对实例对象属性的继承。

function Person(name){
this.name=name;
this.numbers=[1,2,3];
}
Person.prototype.sayName=function(){
console.log(this.name);
}
function Student(name,age){
Person.call(this,name);////第二次调用Person()
this.age=age;
}
Student.prototype=new Person();//第一次调用Person()
Student.prototype.sayAge=function(){
console.log(this.age);
}
var s=new Student('小张',15);
s.sayName();//小张
s.sayAge();//
s.numbers.push(5);
console.log(s.numbers);//[1, 2, 3, 5]
var s1=new Student('小兰',14);
s1.sayName();//小兰
s1.sayAge();//
console.log(s1.numbers);//[1, 2, 3]

组合继承是很常用的继承方式,但是它也有个缺点,就是需要调用两次超类型的构造函数。

*4.寄生式组合式继承

寄生组合式继承:借用构造函数继承属性,使用原型链的混合型式继承方法。寄生组合式是实现继承的最佳方式。

function object(o) {
function F() {
}
F.prototype = o;
return new F();
}
function inheritPrototype(superType, subType) {
var prototype = object(superType.prototype);
prototype.constructor = subType;
subType.prototype = prototype;
}
function superType(name) {
this.name = name;
}
superType.prototype.sayName = function () {
console.log('my name is ' + this.name);
}
function subType(name, age) {
superType.call(this, name);
this.age = age;
}
inheritPrototype(superType, subType);
subType.prototype.sayAge = function () {
console.log('my age is ' + this.age);
}
var s=new superType('Cathy');
s.sayName();//my name is Cathy
var s1 = new subType('Tom', 18);
s1.sayName();//my name is Tom
s1.sayAge();//my age is 18

读javascript高级程序设计06-面向对象之继承的更多相关文章

  1. 读javascript高级程序设计00-目录

    javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...

  2. 读javascript高级程序设计-目录

    javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...

  3. 读javascript高级程序设计08-引用类型之Global、Math、String

    一.Global 所有在全局作用域定义的属性和方法,都属于Global对象. 1.URI编码: encodeURI():主要用于对整个URI编码.它不会对本身属于URI的特殊字符进行编码. encod ...

  4. 读Javascript高级程序设计第三版第六章面向对象设计--创建对象

    虽然Object构造函数或者对象字面量都可以用来创建单个对象,但是缺点非常明显:使用同一接口创建很多对象,会产生大量重复代码. 工厂模式  1 function CreatePerson(name,a ...

  5. 读javascript高级程序设计10-DOM

    一.节点关系 元素的childNodes属性来表示其所有子节点,它是一个NodeList对象,会随着DOM结构的变化动态变化. hasChildNodes():是否有子节点. var headline ...

  6. 读javascript高级程序设计14-错误处理与调试

    一  错误类型 ECMA规定了常见的7种错误类型: Error: 基类型.其他常见的错误类型都继承自该类型,一般供开发人员抛出自定义错误. EvalError:该类型会在eval()函数使用异常时被抛 ...

  7. 《JavaScript高级程序设计》笔记——关于继承

    继承在JavaScript中是一种“奇葩”的存在,因为其本身并没有类(class)的概念(ES5),所以只能用其他方式(原型链.构造函数.对象实例)来模拟继承的行为.既然是模拟,那就应该是想办法实现继 ...

  8. 读javascript高级程序设计17-在线检测,cookie,子cookie

    一.在线状态检测 开发离线应用时,往往在离线状态时把数据存在本地,而在联机状态时再把数据发送到服务器.html5提供了检测在线状态的方法:navigator.onLine和online/offline ...

  9. 读javascript高级程序设计01-基本概念、数据类型、函数

    一. javascript构成 1.javascript实现由三部分组成: ECMAScript:核心语言功能 DOM:文档对象模型,提供访问和操作网页内容的方法和接口 BOM:浏览器对象模型,提供与 ...

随机推荐

  1. 20145320 《Java程序设计》第10周学习总结

    20145320 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 按照计算机网络的定义 ...

  2. Velocity(5)——#set指令

    引用可以让模板设计者生成动态内容,而指令允许设计者真正的负责页面的展现和内容. 指令是以#开头,后面紧跟一个关键字,比如if,else,foreach等.而这个关键字,是可以被放在{}中间的.这是规范 ...

  3. MVC 的各个部分都有那些技术来实现?如何实现?

    MVC 的各个部分都有那些技术来实现?如何实现? MVC 是 Model-View-Controller 的简写 "Model" 代表的是应用的业务逻辑(通过JavaBean,EJ ...

  4. android opengl

    引用:http://weimingtom.iteye.com/blog/1616972 二维坐标系变换为原点在左上角(测试用) * GLES * JOGL * LWJGL * libgdx(使用g2d ...

  5. 【笔记】jquery阻止冒泡事件发生的语句

    时间触发时会执行两个步骤:1.捕获 2.冒泡,而很多浏览器包括jquery都不支持捕获动作所以只能执行冒泡动作. 所谓冒泡就是当点击就是事件的执行顺序,本人的理解为:但某一元素触发时间时它的祖先元素( ...

  6. 使用规则引擎Drools计算圆周率PI

    实际上是使用规则引擎能够更新工作内存区重新匹配规则实现迭代功能. 使用了策略模式实现. <规则引擎与RETE算法介绍> PPT : http://files.cnblogs.com/lov ...

  7. 使用 highchart 绘制柱状图的通用方法与接口

    本文给出使用 highchart 绘制柱状图的通用方法与接口, 只要指定相应的数据结构和配置, 就可以直接拿来使用. 一.  数据结构与基本接口   一般绘制图形, 会涉及到较复杂的数据结构, 比如使 ...

  8. Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群

    安装额外AOS的主要目的,是将它添加到集群,或用于创建批处理服务器. 1.创建集群服务器 这里,Reinhard使用上节Install An Additional AOS 中创建的AOS,来创建集群. ...

  9. Python之通过IP地址库获取IP地理信息

    利用第三方的IP地址库,各个公司可以根据自己的业务情况打造自己的IP地址采集分析系统.例如游戏公司可以采集玩家地区信息,进行有针对性的运营策略,还可能帮助分析玩家网络故障分布等等. #!/usr/bi ...

  10. [充电]C++ string字符串替换

    //C++ 第一种替换字符串的方法用replace()|C++ 第二种替换字符串的方法用erase()和insert()[ C++string|C++ replace()|C++ erase()|C+ ...