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

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. PHP反射获取类中的所有常量

    <?php// Yii 2// namespace yournamespace;// use Yii; /** * 缓存辅助类 */ class CacheHelper { /** * 缓存键 ...

  2. C# 窗体

    窗体的事件:删除事件:先将事件页面里面的挂好的事件删除,再删后台代码里面的事件 Panel是一个容器 1.Label -- 文本显示工具Text:显示的文字取值.赋值:lable1.Text 2.Te ...

  3. 初试FitNesse

    1.下载fitnesse-standalone.jar 2.在cmd中输入,开启fitnesse server 3.在浏览器中输入: 4.编写代码: package fitnesse.slim.tes ...

  4. SGU 455 Sequence analysis(Cycle detection,floyd判圈算法)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=455 Due to the slow 'mod' and 'div' operati ...

  5. VS 解决方案管理器和 编辑窗口同步 联动

    对于题目的解释就是   当我点击一下解决方案管理器中的 某一个文档时, 编辑窗口会联动的   同步到对应的窗口。之前好像被我无意中关掉了,今天重新建立一个项目无意中发现怎么设置了 如果想点击右边的文档 ...

  6. 【001:转载 ubuntu下: 建立本地SVN服务器】

    1.安装 svn 工具 $sudo apt-get install subversion 2.  创建工程文件夹,用于存放工程 $mkdir ~/localsvn $mkdir ~/localsvn/ ...

  7. CSS3:transform translate transition 这些都是什么?

    transform:一个属性名称,即CSS3 2D转换 属性. translate:一个属性函数,用法是translate(dx,dy) div { transform: translate(50px ...

  8. 【转】PowerShell入门(七):管道——在命令行上编程

    转至:http://www.cnblogs.com/ceachy/archive/2013/02/22/PowerShell_Pipeline.html 管道对于Shell来说是个化腐朽为神奇的东西, ...

  9. dotfiles管理

    刚刚知道dotfiles这个东西,百度也没发现什么太有价值的讲解,还都是英文,所以自己立志来好好屡屡清楚 1.dotfiles是什么?我自己的理解:linux下(mac下)有各种app,每个人会根据自 ...

  10. python(七)字符串格式化、生成器与迭代器

    字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name) ...