读javascript高级程序设计06-面向对象之继承
原型链是实现继承的主要方法,通过原型能让一个引用类型继承另一个引用类型。
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-面向对象之继承的更多相关文章
- 读javascript高级程序设计00-目录
javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...
- 读javascript高级程序设计-目录
javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...
- 读javascript高级程序设计08-引用类型之Global、Math、String
一.Global 所有在全局作用域定义的属性和方法,都属于Global对象. 1.URI编码: encodeURI():主要用于对整个URI编码.它不会对本身属于URI的特殊字符进行编码. encod ...
- 读Javascript高级程序设计第三版第六章面向对象设计--创建对象
虽然Object构造函数或者对象字面量都可以用来创建单个对象,但是缺点非常明显:使用同一接口创建很多对象,会产生大量重复代码. 工厂模式 1 function CreatePerson(name,a ...
- 读javascript高级程序设计10-DOM
一.节点关系 元素的childNodes属性来表示其所有子节点,它是一个NodeList对象,会随着DOM结构的变化动态变化. hasChildNodes():是否有子节点. var headline ...
- 读javascript高级程序设计14-错误处理与调试
一 错误类型 ECMA规定了常见的7种错误类型: Error: 基类型.其他常见的错误类型都继承自该类型,一般供开发人员抛出自定义错误. EvalError:该类型会在eval()函数使用异常时被抛 ...
- 《JavaScript高级程序设计》笔记——关于继承
继承在JavaScript中是一种“奇葩”的存在,因为其本身并没有类(class)的概念(ES5),所以只能用其他方式(原型链.构造函数.对象实例)来模拟继承的行为.既然是模拟,那就应该是想办法实现继 ...
- 读javascript高级程序设计17-在线检测,cookie,子cookie
一.在线状态检测 开发离线应用时,往往在离线状态时把数据存在本地,而在联机状态时再把数据发送到服务器.html5提供了检测在线状态的方法:navigator.onLine和online/offline ...
- 读javascript高级程序设计01-基本概念、数据类型、函数
一. javascript构成 1.javascript实现由三部分组成: ECMAScript:核心语言功能 DOM:文档对象模型,提供访问和操作网页内容的方法和接口 BOM:浏览器对象模型,提供与 ...
随机推荐
- FTP上传
package cn.zto.util; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileIn ...
- 获取设置唯一的UDID的值
http://blog.sina.com.cn/s/blog_5971cdd00102vqgy.html ---方法 http://www.jianshu.com/p/a7a4a14c8030 -- ...
- 数据库中 关于不能用in 不能用exist 等关键字 查询不出现字段的问题
这是之前在网上见到的一道题,后来心里略微想了想 觉得应该可能,所以就一闪而过了,之前去面试晨光的时候面试者问了我这道问题,当时也只是把自己的想法说了一下,可能因为当时面试的感觉不太好,面试官也没有追究 ...
- H2.64的远程回放--开篇
之前有2周一直在研究H.264的远程回放, 不是本机播放哦. 实现的步骤: 1. 先保证解码H.264 2. H2.64文件的解析, 当然是为了回放的速度 3. H.264帧的传输, 我用的是TCP ...
- Linux中/proc目录下文件详解
转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...
- 华东交通大学2016年ACM“双基”程序设计竞赛 1008
Problem Description halfyarn找你写个简单的题?好哒!给你n个整数,现在要求你选择两个位置的数,例如选择第pos_a个数a,和第pos_b个数b,给定ans=min(a,b) ...
- python协程与异步I/O
协程 首先要明确,线程和进程都是系统帮咱们开辟的,不管是thread还是process他内部都是调用的系统的API,而对于协程来说它和系统毫无关系; 协程不同于线程的是,线程是抢占式的调度,而协程是协 ...
- python time模块
time模块 (有效时间1970-2038) (1)本地时间 (2)时间戳 (3)延时 time.localtime([secs]) #struct_time time.time() #timesta ...
- FreeSWITCH中文语音包
一.中文语音资源的获取 官方提供的资源:http://files.freeswitch.org/releases/sounds/ 自己录音 实在不行可以@我给你发一份. 二.中文资源的安装 英文资源的 ...
- 有限状态机(Python)
有限状态机(Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.FSM是一种算法思想,简单而言,有限状 ...